Главное, чтобы иметь в виду, что контроллер вида устанавливает рамку своего представления. Это связано с тем, что объем пространства, доступного для представления, может измениться в течение всего срока действия приложения, и только контроллер представления знает, как правильно отрегулировать рамку представления. Примеры того, когда количество изменений пространства включает в себя изменение высоты навигационной панели, поворот устройства от портрета к ландшафту, а строка состояния также может увеличиваться в высоту, если пользователь выполняет вызов. Из-за этого вы не должны изменять рамку представления самостоятельно.
Итак, первое, что вам нужно, это удалить весь код, связанный с модификацией рамки представления.
Теперь вам нужно спроектировать свои взгляды с учетом того, что размер рамки может измениться в любой момент. Это означает правильную настройку свойства авторазмера для каждого подсмотра. Если вы сделаете это, то не имеет значения, включите ли вы имитацию навигационной панели и строки состояния или нет; они как раз там, чтобы помочь вам понять, как будет выглядеть конечный результат в большинстве случаев.
Вы можете установить свойство авторезистентности каждого поднабора в Interface Builder в инспекторе размеров (тот, который имеет значок линейки). В анимации белый квадрат представляет корневой вид контроллера вида, красное поле представляет выбранное в данный момент подвью. Вы заметите, что подвью привязывается к верхнему левому углу корневого представления по умолчанию. Это прекрасно, если размер представления никогда не изменяется, но мы знаем, что это не так. Если у вас есть подпункты, которые вы хотите отобразить внизу, неважно, что нужно, тогда вам нужно сыграть с диаграммой слева. Способ его работы заключается в том, что выбрана одна из четырех линий вокруг края, тогда фиксируется расстояние между этим краем корневого представления и краем подвью. Поэтому, если вы хотите, чтобы подвью отображалось внизу, вам нужно убедиться, что выбрана самая нижняя строка, а не верхняя. Две линии в середине влияют на изменение размера подзона при изменении размера корневого представления. Так, например, если у вас было представление таблицы, которое вы хотели бы занять всю высоту экрана, вы должны убедиться, что выбрана внутренняя вертикальная линия. Это называется моделью распорок и пружин.
Если вы добавляете подпрограммы программно, вам необходимо установить свойство autoresizingMask для каждого поднабора. Here's an explanation.
Надеюсь, что это поможет!
Также обратите внимание, что я играл с настройкой «смоделированный статус» и, по крайней мере, один раз, это оказалось правильной настройкой, поэтому мне не пришлось вносить изменения в код. – mobibob