Mierzenie podwidoków
Sprawdzanie rozmiarów podwidoków podczas układania.
Mierzenie podwidoków to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 4 lekcji w sumie.
Pomiar wyznacza układ
Zanim będzie można rozmieścić elementy potomne, trzeba je zmierzyć. Układ SwiftUI jest negocjacją: rodzic proponuje rozmiary, elementy potomne odpowiadają, a następnie należy uzgodnić te odpowiedzi.
Pytanie podwidoku o jego rozmiar
Każde proxy w kolekcji Subviews odpowiada na sizeThatFits(_:) dla danej propozycji ProposedViewSize. Proxy zwraca rozmiar, jaki element potomny przyjąłby dla tej propozycji.
let size = subview.sizeThatFits(.unspecified)Trzy propozycje testowe
Aby poznać elastyczność elementu potomnego, sprawdź go na trzy sposoby: .zero ujawnia jego rozmiar minimalny, .infinity — maksymalny, a .unspecified — idealny.
let minSize = subview.sizeThatFits(.zero)
let maxSize = subview.sizeThatFits(.infinity)
let ideal = subview.sizeThatFits(.unspecified)Proponowanie konkretnej szerokości
W przypadku tekstu z zawijaniem zaproponuj konkretną szerokość, a wysokość pozostaw jako nil. Element potomny zgłosi wysokość potrzebną przy tej szerokości.
let proposal = ProposedViewSize(width: 200, height: nil)
let fit = subview.sizeThatFits(proposal)Priorytet układu
Każdy podwidok udostępnia wartość priority (ustawianą za pomocą .layoutPriority). Gdy brakuje miejsca, należy najpierw przydzielić dzieciom o wyższym priorytecie ich idealny rozmiar.
for subview in subviews {
let p = subview.priority
// distribute space to higher priority first
}Odczytywanie wartości niestandardowych
Podwidoki mogą przechowywać dane określonego typu za pomocą LayoutValueKey. Układ odczytuje subview[MyKey.self], aby uwzględnić tę wartość przy rozmieszczaniu — na przykład odstęp dla konkretnego elementu.
private struct RankKey: LayoutValueKey {
static let defaultValue: Int = 0
}
let rank = subviews[0][RankKey.self]Ustawianie wartości układu
Widok ustawia swoją wartość układu za pomocą modyfikatora layoutValue(key:value:), dzięki czemu dzieci mogą przekazywać wskazówki do układu.
Text("Featured").layoutValue(key: RankKey.self, value: 10)Odstępy między podwidokami
Podwidoki udostępniają preferencje dotyczące spacing. Użyj subview.spacing.distance(to:along:), aby uzyskać zalecaną przerwę między dwoma sąsiednimi dziećmi wzdłuż osi.
let gap = subviews[0].spacing.distance(
to: subviews[1].spacing, along: .horizontal)Sumowanie rozmiarów
Układ poziomy sumuje szerokości dzieci i przyjmuje wysokość najwyższego z nich. Zmierzenie wszystkich dzieci przed ich rozmieszczeniem pozwala obliczyć rozmiar kontenera, zanim cokolwiek zostanie umieszczone.
let sizes = subviews.map { $0.sizeThatFits(.unspecified) }
let totalWidth = sizes.reduce(0) { $0 + $1.width }
let maxHeight = sizes.map(\.height).max() ?? 0Ponowny pomiar podczas rozmieszczania
W placeSubviews należy ponownie wykonać pomiar (lub użyć rozmiarów z pamięci podręcznej), aby pozycje odpowiadały wcześniej zgłoszonym wartościom. Pomiary są szybkimi wywołaniami zastępczymi, a nie rzeczywistym renderowaniem.
func placeSubviews(in bounds: CGRect, proposal: ProposedViewSize, subviews: Subviews, cache: inout ()) {
for s in subviews {
let size = s.sizeThatFits(.unspecified)
// use size to position s
_ = size
}
}Uwzględnianie propozycji rodzica
Zawsze należy respektować otrzymaną propozycję. Jeśli rodzic proponuje stałą szerokość, należy rozmieścić dzieci w jej obrębie; nie wolno po cichu wychodzić poza nią, ponieważ układ zostanie przycięty.
let containerWidth = proposal.width ?? .infinitySzybkie sprawdzenie: pomiary
Sprawdź swoją wiedzę na temat pomiarów podwidoków.
Podsumowanie: pomiary podwidoków
Pomiar jest sercem niestandardowego układu. Sprawdzaj dzieci za pomocą .zero, .infinity i .unspecified, aby poznać ich minimalne, maksymalne i idealne rozmiary, proponuj konkretne szerokości zawartości zawijanej do wierszy oraz respektuj priorytet układu i preferencje dotyczące odstępów.
Niestandardowe wartości LayoutValueKey pozwalają dzieciom przekazywać wskazówki. W obu metodach protokołu wykonuj pomiary w spójny sposób, aby zgłaszany rozmiar i rozmieszczenie zawsze były zgodne.
Często zadawane pytania
Czy lekcja „Mierzenie podwidoków” jest bezpłatna?
Tak — pełny tekst „Mierzenie podwidoków” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Mierzenie podwidoków”?
Sprawdzanie rozmiarów podwidoków podczas układania. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Swift Academy?
Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Mierzenie podwidoków”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?
Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Podstawy protokołu Layout
- Mierzenie podwidoków
- Budowanie układu przepływowego
- Pamięć podręczna układu i wydajność