Чтобы попытаться ответить на ваш вопрос:
Вы правы, этот автоматический макет не закончил свою работу в viewDidLoad()
или даже viewWillAppear()
.Обычно, когда вам нужно выполнить такие настройки макета, вы должны сделать это в viewDidLayoutSubviews()
.Из документов Apple:
viewDidLayoutSubviews
Когда изменяются границы для представления контроллера представления, представление корректирует позиции своих подпредставлений, а затем система вызывает этометод.
Однако, если я понимаю, что вы на самом деле пытаетесь сделать ...
Используя UIStackView
, вы можете избежать необходимости использовать any код.
Вставьте ваши метки, виды, кнопки и т. Д. В вертикальное значение UIStackView
.Задайте для свойств:
Alignment: Fill (or Leading or Center as suits your layout)
Distribution: Equal Spacing
Spacing: 0
Ограничить верхнюю часть стекового представления к верху представления (плюс любое желаемое заполнение) и от нижнего до нижнего представления (плюс любое желаемое заполнение).
Результат с размером iPhone SE:
![enter image description here](https://i.stack.imgur.com/e7Vss.png)
Результат с размером iPhone 8:
![enter image description here](https://i.stack.imgur.com/iDBSQ.png)
Результат с размером iPhone XS:
![enter image description here](https://i.stack.imgur.com/pGuER.png)
А вот iPhone 8 с парой дополнительных элементов различной высоты:
![enter image description here](https://i.stack.imgur.com/A2IdI.png)
Как видите, элементы имеют одинаковое вертикальное расстояние между ними, и все это обрабатывается стековым представлением.