Как обновить размер StackView после добавления вложенных представлений (программно)?

#swift #uikit #swift5 #uistackview #cgrect

#быстрый #уикит #swift5 #uistackview #cgrect

Вопрос:

 let innerView = UIView(frame: .init(x: 0, y: 0, width: 50, height: 50)) let outerSV = UIStackView(arrangedSubviews: [innerView])   outerSV.frame.width // still 0! should be 50 outerSV.frame.height // still 0! should be 50  

Итак, вопрос в следующем: как обновить размер StackView после добавления вложенных представлений?

Ответ №1:

Вы должны вызвать sizeToFit() и layoutIfNeeded() на подвидах стекового представления. Ограничьте представление Uistack, как обычно, и ограничьте вложенные представления, как обычно.

Кроме того, вам нужно настроить его на пропорциональное заполнение, и он будет изменяться в соответствии с новым контентом.

И убедитесь, что у вас нет нижнего ограничения высоты в представлении стека. Вам понадобятся только левые, правые и верхние ограничения.

Комментарии:

1. Все звучит разумно, но это не работает. Я также вызвал функции sizeToFit() и layoutIfNeeded (). Но я вызвал его на StackView. Все равно не работает.

2. @Roman Не могли бы вы показать свои настройки ограничений ?

3. У меня нет никаких ограничений. Весь код находится в вопросе 🙂

4. Вы должны поместить верхние, ведущие и конечные ограничения в StackView, чтобы это работало правильно

5. Но я не хочу, чтобы этот вид стека где-либо отображался. Я не буду показывать его пользователю. Моя цель состоит в том, чтобы программно построить StackView, заполнить его вложенными представлениями и сделать «снимок» этой дыры (UIImageView). И я могу это сделать, если сам установлю размер стекового представления вручную. Но я хочу, чтобы он определял размер по подвидам!