Nie mogę znaleźć jednoznacznej odpowiedzi w dokumentacji Apple dotyczącej autoukładu Cocoa o różnicy między przytulaniem treści a odpornością na kompresję.
Czy ktoś może wyjaśnić ich zwyczaje i różnice?
cocoa
autolayout
dmitrynikolaev
źródło
źródło
content-hugging
: walczyłby z pustą przestrzenią. Zmusiłoby to widok do obejścia ciebie. Ale jeśli nie masz za dużo miejsca, a zamiast tego masz bardzo mało miejsca, wówczascontent-compressions-resistance
walczyłbyś z twoim widokiem, ponieważ nie był w stanie wyświetlić całej jego zawartości, np. Etykiety zostałyby obcięte.Odpowiedzi:
Szybkie podsumowanie pojęć:
Przykład:
Powiedz, że masz taki przycisk:
i przypiąłeś krawędzie do większego podglądu z priorytetem 500.
Następnie, jeśli Priorytet przytulania> 500 będzie wyglądał następująco:
Jeśli priorytet przytulania <500 będzie wyglądał następująco:
Jeśli superwizja teraz się zmniejszy, to jeśli priorytet Odporności na ściskanie> 500, będzie to wyglądać tak
W przeciwnym razie, jeśli priorytet odporności na ściskanie wynosi <500, może wyglądać następująco:
Jeśli to nie działa tak, prawdopodobnie masz jakieś inne ograniczenia, które psują twoją dobrą pracę!
Np. Możesz przypiąć go do superwizji z priorytetem 1000. Lub możesz mieć priorytet szerokości. Jeśli tak, może to być pomocne:
Edytor> Dopasuj rozmiar do treści
źródło
Rzuć okiem na ten film instruktażowy na temat Autolayout , wyjaśniają go dokładnie
źródło
źródło: @mokagio
Rozmiar zawartości wewnętrznej - dość oczywisty, ale widoki ze zmienną zawartością są świadome, jak duża jest ich zawartość i opisują rozmiar zawartości za pomocą tej właściwości. Niektórymi oczywistymi przykładami widoków, które mają rzeczywiste rozmiary treści, są UIImageViews, UILabels, UIButtons.
Priorytet przytulania zawartości - im wyższy jest ten priorytet, tym bardziej widok jest odporny na powiększanie się niż jego rozmiar.
Priorytet odporności na kompresję treści - im wyższy jest ten priorytet, tym bardziej widok jest mniejszy niż jego rzeczywisty rozmiar.
Sprawdź tutaj, aby uzyskać więcej wyjaśnień: MAGIA AUTOMATYCZNEGO UKŁADANIA: PRIORYTETY ROZMIARU TREŚCI
źródło
Załóżmy, że masz przycisk z tekstem „Kliknij mnie”. Jaka powinna być szerokość tego przycisku?
Po pierwsze, zdecydowanie nie chcesz, aby przycisk był mniejszy niż tekst. W przeciwnym razie tekst zostałby obcięty. Jest to priorytet poziomej odporności na ściskanie.
Po drugie, nie chcesz, aby przycisk był większy niż powinien. Przycisk, który wyglądał tak, [Click Me], jest oczywiście zbyt duży. Chcesz, aby przycisk „przytulił” jego zawartość bez zbytniego dopełniania. Jest to horyzontalny poziom przytulania treści. W przypadku przycisku nie jest on tak silny, jak pozioma odporność na kompresję w poziomie.
źródło
Jeśli
view.intrinsicContentSize.width != NSViewNoIntrinsicMetric
, to układ automatyczny tworzy specjalne ograniczenie typuNSContentSizeLayoutConstraint
. To ograniczenie działa jak dwa normalne ograniczenia:view.width <= view.intrinsicContentSize.width
priorytetu poziomego przytulania, orazview.width >= view.intrinsicContentSize.width
priorytetu poziomej odporności na ściskanie.W Swift, dzięki nowym kotwicom układu w iOS 9, możesz skonfigurować równoważne ograniczenia takie jak to:
Podobnie jeśli
view.intrinsicContentSize.height != NSViewNoIntrinsicMetric
, to układ automatyczny tworzy taki,NSContentSizeLayoutConstraint
który działa jak dwa ograniczenia na wysokości widoku. W kodzie wyglądałyby tak:Możesz zobaczyć te specjalne
NSContentSizeLayoutConstraint
wystąpienia (jeśli istnieją), drukującview.constraints
po uruchomieniu układu. Przykład:źródło
Przytulanie zawartości i priorytety odporności na kompresję treści działają dla elementów, które mogą obliczać swój rozmiar wewnętrznie w zależności od nadchodzących treści.
Z dokumentów Apple :
źródło
To
Content hugging priority
jest jak gumka która jest umieszczona wokół widoku. Im wyższa wartość priorytetu, tym silniejsza gumka i tym bardziej chce ona przytulić się do swojej zawartości. Wartość priorytetową można sobie wyobrazić jako „siłę” gumkiI o
Content Compression Resistance
to, jak bardzo widok „opiera się” zmniejszaniu Widok o wyższej wartości priorytetu odporności jest tym, który będzie odporny na kompresję.źródło