Мне кажется, что это довольно распространенная парадигма - показывать / скрывать UIViews
, чаще всего UILabels
, в зависимости от бизнес-логики. Мой вопрос: как лучше всего использовать AutoLayout для ответа на скрытые представления, как если бы их фрейм был 0x0. Вот пример динамического списка из 1-3 функций.
Прямо сейчас у меня есть верхнее пространство 10 пикселей от кнопки до последней метки, которое, очевидно, не будет сдвигаться вверх, когда метка скрыта. На данный момент я создал выход для этого ограничения и изменил константу в зависимости от того, сколько ярлыков я отображаю. Это, очевидно, немного взломано, поскольку я использую отрицательные постоянные значения, чтобы нажимать кнопку над скрытыми кадрами. Это также плохо, потому что он не ограничен фактическими элементами макета, а просто скрытыми статическими вычислениями, основанными на известных высотах / заполнении других элементов, и, очевидно, борется с тем, для чего был создан AutoLayout.
Я, очевидно, мог бы просто создать новые ограничения в зависимости от моих динамических меток, но это много микроменеджмента и много многословия, чтобы попытаться просто свернуть некоторые пробелы. Есть ли подходы лучше? Изменить размер кадра 0,0 и позволить AutoLayout делать свое дело без манипуляций с ограничениями? Полностью удалить просмотры?
Честно говоря, простое изменение константы из контекста скрытого представления требует единственной строчки кода с простыми вычислениями. Воссоздание новых ограничений с помощью constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:
кажется таким трудным.
Изменить, февраль 2018 г.: см. ответ Бена с помощью UIStackView
s