Границы UIScrollView еще не изменены в "viewDidLoad" - PullRequest
4 голосов
/ 11 ноября 2010

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

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

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

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

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

Ответы [ 2 ]

7 голосов
/ 11 ноября 2010

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

0 голосов
/ 11 ноября 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...