Ответ 1
Ну, конечно, это была моя собственная ошибка.
Урок номер один:. Вы не делаете себе никаких выгод, не спать всю ночь, пытаясь исправить сломанный код. Отдохни! Пейте больше воды! Вы, вероятно, только усугубите ситуацию, если будете пытаться заставить свой мозг выполнить сложную алгоритмическую стратегию и логику за ее постель.
Оказывается, у меня был мошенник UIView в нижней части иерархии представлений, у которого вообще не было свойства autoresize. Я думал, что просмотрел все, но оказывается, что я его пропустил. (Только один маленький взгляд, и целый день выстрелил!)
Я могу сказать всем, кто приходит позже с подобным расстройством, что Autoresizing
действительно работает как задокументированный. Если вы думаете, что "что-то не называется", вы, вероятно, смотрите не в то место. Кроме того, константы enum UIViewAutoresizingMask
не используются точно так же, как в Interface Builder. В IB вы "блокируете" поля, тогда как при их программном программировании блокированные поля принимаются по умолчанию, и вы "разблокируете" их, установив его как "гибкий". Так, например, установка только битов FlexibleWidth и FlexibleHeight эквивалентна включению всех параметров авторазрешения в IB. Выбрасывая любую из масок поля (т.е. UIViewAutoresizingFlexibleLeftMargin
), вы "отменяете" соответствующий параметр авторезизации поля в IB. (Я видел много других сообщений, плавающих вокруг, где это, казалось, было основной точкой смятения для некоторых людей.)
Во время моих исследований, однако, я заметил, что при изменении размера UIView, независимо от того, автоматически или нет, не возникает какого-либо события, сообщения, уведомления или другого. Хотя это не обязательно для изменения размера подпроектов, было бы неплохо узнать, когда это происходит в ситуации, когда вы хотите вызвать прокрутку scrollView или tableView, если он изменит размер кадра. Я знаю, что это можно легко сделать, когда клавиатура всплывает, потому что вокруг нее есть система уведомлений, а также методы TextField
delegate
. Так что, может быть, тема для другого сообщения...
В любом случае, спасибо всем, кто участвует в StackOverflow!