Главное, что здесь следует иметь в виду, это то, что контроллер представления сам устанавливает кадр своего представления. Это связано с тем, что объем пространства, доступного для представления, может изменяться в течение времени жизни приложения, и только контроллер представления знает, как правильно отрегулировать кадр представления. Примеры того, когда количество изменений пространства включает в себя изменение высоты панели навигации, поворот устройства из портретной в альбомную и строку состояния также может увеличиваться по высоте, если пользователь принимает вызов. Из-за этого вы не должны изменять рамку вида самостоятельно.
Итак, первое, что вам нужно, это удалить весь код, связанный с модификацией фрейма представления.
Теперь вам нужно спроектировать свои представления с учетом того, что размер кадра может измениться в любой момент. Это означает правильную настройку свойства autoresizing для каждого подпредставления. Если вы сделаете это, то не будет иметь значения, включите ли вы имитированную навигацию и строки состояния или нет; они просто помогут вам увидеть, как будет выглядеть конечный результат в большинстве случаев.
Вы можете установить свойство автоматического изменения размера каждого подпредставления в Интерфейсном Разработчике в Инспекторе размера (тот, что со значком линейки). В анимации белое поле представляет корневой вид контроллера представления, красное поле представляет текущее выбранное подпредставление. Вы заметите, что подпредставление по умолчанию привязано к верхнему левому углу корневого представления. Это хорошо, если размер представления никогда не меняется, но мы знаем, что это не так. Если у вас есть подпредставления, которые вы хотите показывать внизу, несмотря ни на что, вам нужно поиграть с диаграммой слева. Это работает так: если выбрана одна из четырех линий вокруг края, то расстояние между этим краем корневого представления и краем подпредставления является фиксированным. Поэтому, если вы хотите, чтобы подпредставление отображалось внизу, вам нужно убедиться, что выбрана самая нижняя строка, а не верхняя. Две строки в середине влияют на то, изменяется ли размер подпредставления при изменении размера корневого представления. Так, например, если у вас есть табличное представление, которое вы хотите занимать всю высоту экрана, вы должны убедиться, что выбрана внутренняя вертикальная линия. Это называется моделью распорок и пружин.
Если вы добавляете подпредставления программно, вам нужно установить свойство autoresizingMask для каждого подпредставления. Вот объяснение .
Надеюсь, это поможет!