Wydaje mi się, że dość powszechnym paradygmatem jest pokazywanie / ukrywanie UIViews
, najczęściej w UILabels
zależności od logiki biznesowej. Moje pytanie brzmi: jaki jest najlepszy sposób używania AutoLayout do reagowania na ukryte widoki, tak jakby ich ramka była 0x0. Oto przykład dynamicznej listy 1-3 funkcji.
W tej chwili mam górną przestrzeń od przycisku do ostatniej etykiety o wielkości 10 pikseli, która oczywiście nie przesunie się, gdy etykieta jest ukryta. W tej chwili stworzyłem ujście dla tego ograniczenia i zmodyfikowałem stałą w zależności od tego, ile etykiet wyświetlam. Jest to oczywiście trochę hakerskie, ponieważ używam ujemnych wartości stałych, aby naciskać przycisk nad ukrytymi ramkami. Jest również zły, ponieważ nie jest ograniczony do rzeczywistych elementów układu, tylko podstępne obliczenia statyczne oparte na znanych wysokościach / wypełnieniach innych elementów i oczywiście walka z tym, do czego został zbudowany AutoLayout.
Mógłbym oczywiście po prostu utworzyć nowe ograniczenia w zależności od moich dynamicznych etykiet, ale to dużo mikrozarządzania i dużo gadatliwości przy próbie zwinięcia niektórych białych znaków. Czy są lepsze podejścia? Zmieniasz rozmiar ramki 0,0 i pozwalasz, aby AutoLayout działało bez manipulacji ograniczeniami? Całkowicie usunąć widoki?
Szczerze mówiąc, sama modyfikacja stałej z kontekstu widoku ukrytego wymaga jednej linii kodu z prostymi obliczeniami. Odtwarzanie nowych ograniczeń w programie constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:
wydaje się takie ciężkie.
Edycja lutego 2018 : Zobacz odpowiedź Bena z UIStackView
s