Границы UIScrollView еще не изменились в viewDidLoad

У меня есть подкласс UIViewController, представление которого настроено в файле NIB. Представление имеет подпредставление UIScrollView.

UIScrollView занимает почти весь свой файл NIB, но его суперпредставление добавляется в качестве подпредставления к гораздо меньшему представлению (настроенному в другом NIB) - например. UIScrollView составляет 80% высоты его собственного NIB, но в конечном итоге составляет только 10% высоты окна приложения.

Когда я вызываю [scrollView bounds].size.height в методе viewDidLoad viewController, я получаю высоту scrollView относительно его собственного NIB, а не высоту, до которой он в конечном итоге изменяет размер в соответствии с его суперпредставлениями (например, 80% высота окна, а не 10%).

Если я позже вызову [scrollView bounds].size.height (например, для обработки события поворота), я получу правильное значение.

Как я могу изначально получить правильно измененное значение?


person Bryan Irace    schedule 11.11.2010    source источник


Ответы (2)


Вы пытались справиться с этим в viewWillAppear: или viewDidAppear?

person imaginaryboy    schedule 11.11.2010
comment
Использование viewDidAppear сработало. В контроллере основного представления я выделяю и инициирую контроллер представления прокрутки (чей NIB включает UIScrollView). После добавления представления контроллера представления прокрутки в качестве подпредставления представления контроллера основного представления я вызвал viewDidAppear в контроллере представления прокрутки и обработал там получение границ. Спасибо! - person Bryan Irace; 11.11.2010

Предполагая, что я следую, должен быть какой-то момент после загрузки контроллера представления, в котором вы захватываете .view и вставляете его в другое подвид? Если это так, то границы будут скорректированы. Вы не можете получить их в viewDidLoad, потому что представление не может знать, что вы будете делать с ним в будущем. Даже если ваш вызов для вставки его в качестве подпредставления является самым первым, что вы делаете после загрузки контроллера представления, именно средство доступа к представлению вызовет загрузку представления и, следовательно, viewDidLoad, и все это до того, как вы фактически поместите представление куда-либо. .

Поскольку у bounds есть геттер и сеттер, он должен соответствовать кодированию ключ-значение, и в этом случае вы можете использовать viewDidLoad для регистрации наблюдателя на границах и делать все, что вам нужно, когда границы изменяются.

person Tommy    schedule 11.11.2010