2016-07-20 34 views
6

Dlaczego dokładnie jest wymagana wartośćMaxLayoutWidth?Dlaczego dokładnie jest wymagana wartośćMaxLayoutWidth?

UIKit reference mówi

preferredMaxLayoutWidth

korzystna wartość maksymalna szerokość (w punktach) na etykiecie wielowierszowego.

Ta właściwość wpływa na rozmiar etykiety, gdy ograniczenia układu są do niej stosowane. Podczas układania, jeśli tekst wykracza poza szerokość określoną przez tę właściwość, dodatkowy tekst jest przesyłany do jednego lub więcej nowych linii, zwiększając w ten sposób wysokość etykiety.

Wskazówka to:

jeśli tekst wykracza poza szerokości określonej przez tę właściwość, dodatkowy tekst przepływa do jednego lub kilku nowych linii

Tak, na etykiecie wielowierszowego , jeśli właściwość preferredMaxLayoutWidth nie byłaby ustawiona, czy tekst byłby po prostu kontynuowany poza z ? Dlaczego chcielibyśmy, aby tak się stało, na etykiecie, którą wyraźnie określiliśmy jako multilinię?

Jaki jest naprawdę powód, dla którego ta właściwość istnieje? Czy jest to coś z Auto Layout? Proszę wyjaśnić, naprawdę chcę to zrozumieć.

Odpowiedz

13

Twoje przypuszczenie jest tuż - ma to związek z automatycznym układem. Kiedy system musi ułożyć etykietę wielowierszową, musi znać dwa wymiary: szerokość i wysokość etykiety.

Czasami jedno lub jedno ograniczenie wyraźnie: możesz powiedzieć "Chcę, aby moja etykieta miała szerokość 300 punktów" lub "Chcę, aby moja etykieta była dokładnie jedna linia wysoka". System może następnie obliczyć inny wymiar na podstawie twojego ograniczenia i tekstu na etykiecie.

Innym razem nie ograniczasz - możesz chcieć, aby etykieta zawijała się w dostępnym miejscu, ale zmniejszać się w poziomie, jeśli nie zawiera dużo tekstu, więc nie ograniczasz ani dokładnie szerokość lub wysokość. W takim przypadku Auto Layout może się mylić, ponieważ tekst nie ma tak naprawdę "wewnętrznego rozmiaru", jak ma to miejsce w przypadku wielu innych treści. Na przykład:

A sentence can be quite long horizontally, 

or 
it 
might 
be 
skinny 
but 
tall 

Oba te układy - i wiele pośrednich - będą równie ważne w oczach Auto Layout. Aby pomóc w prowadzeniu, firma Apple wprowadziła właściwość preferredMaxLayoutWidth do pakowania etykiet. Jeśli twoja etykieta nie określi dokładnie dokładnej szerokości lub wysokości, UIKit rozpocznie układanie tekstu w pierwszej linii, aż osiągniesz preferowaną maksymalną szerokość dla tego układu, a następnie zawiń i kontynuuj proces w każdej kolejnej linii.

Jeśli nie zostanie ustawiony preferredMaxLayoutWidth, tekst nie wykracza poza etykietę bounds.Zamiast tego, jedna z dwóch rzeczy by się stało:

  • Etykieta dostanie coraz szerzej, rozszerza swoją frame.size.width aby dopasować tekst na jednej linii, aż wszystko zostało oddane, lub
  • Etykieta będzie obciąć swój tekst

Skutecznie, to czyni go niezwykle preferredMaxLayoutWidth mechanizm kierowania postępowaniem Auto layout kiedy zawijania tekstu bez wymagając, aby napisać kilka kod dynamicznych ograniczeń, aby osiągnąć ten sam efekt. Jest to bardzo przydatny skrót, szczególnie w połączeniu z niektórymi opcjami programu Interface Builder, aby ustawić maksymalną szerokość układu na np. Pierwsza szerokość układu wykonawczego.

Nadzieja, która pomaga uporządkować sprawy!

+0

Dziękuję bardzo za tę odpowiedź. Zmagałem się ze zrozumieniem Auto Layout i rzeczy z nim związanych, a twoje wyjaśnienie jest bardzo jasne i przyjemne w czytaniu. Szkoda, że ​​cała dokumentacja Jabłek była taka. Poprawiłem twoją odpowiedź i chciałbym, żebyś skomentował jedną rzecz, zanim przyjmuję twoją odpowiedź. Czy preferredMaxLayoutWidth robi cokolwiek więcej, mniej lub mniej, niż tylko ustawienie prostego ograniczenia szerokości? Czy jest to całkowicie i całkowicie to, co to jest, skrót do tworzenia ograniczenia szerokości? –

+0

Oh! Może to jest tak: przed dodaniem ograniczeń w Konstruktorze interfejsów, potrzebna była funkcja RecommendedMaxLayoutWidth do określenia szerokości etykiety wielowierszowej (ponieważ akceptowanie szerokości obwiedni nie było wystarczające? Wait ...) edit: nie, to nie może być, ponieważ to rzecz nie istniała przed ograniczeniami, preferowane stany odniesienia UIKitMaxLayoutWidth dodano w iOS 6.0. Hmm ... Może to po prostu skrót do tworzenia ograniczenia szerokości? –

+0

Co to jest pierwsza szerokość układu wykonawczego? –