Разочарован инициализацией представления в loadView - PullRequest
4 голосов
/ 31 января 2012

Я делаю все программно при разработке для ios, поэтому я вручную инициализирую представление контроллеров представления в loadView для всех моих контроллеров представления (это то, что Apple говорит делать).Что меня расстраивает, когда я делаю это таким образом, так это то, что кадр viewcontrollers изначально {{0, 20}, {320, 460}} неправильно учитывает любые панели навигации или вкладки, которые есть в моем приложении.Наконец, представление устанавливает свой правильный кадр в viewDidAppear, но к этому времени уже слишком поздно что-либо делать.Есть ли способ заставить его распознавать макет вида раньше, не вычисляя его вручную?

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

Есть ли какой-нибудь шаблон, который Apple рекомендует для этого сделать, или же он в любом случае должен заставить его распознавать макет представления раньше, не вычисляя его вручную?

Ответы [ 2 ]

4 голосов
/ 31 января 2012

Если вы используете iOS 5, вы должны получить правильный кадр в методах viewDidLayoutSubviews и viewWillLayoutSubviews вашего подкласса UIViewController. Здесь вы должны рассчитать макет, и они вызываются, когда устройство вращается.

В противном случае, viewWillAppear существует из iOS 2.0, и мое тестовое приложение показывает, что ему передан правильный кадр. Это не решает вращение в середине, но, вероятно, вы можете просто подключиться к этому в другом месте. Вы не должны настраивать свои взгляды так поздно в игре, но кроме игры с layoutIfNeeded из viewDidLoad (что мне не удавалось в прошлом), я не знаю, что вы предполагается сделать предварительно iOS5.

0 голосов
/ 31 января 2012

Вы можете убедиться, что ваш вид имеет правильную маску автоматического изменения размера, и все должно корректироваться, как только появится новый размер.

[view setAutoresizingMask:UIViewAutoresizingFlexibleHeight];

Это то, что я обычно делаю.В противном случае я настраиваю макет в более позднем обратном вызове - он корректируется для панели навигации с помощью viewWillAppear, не уверен, что viewDidLoad слишком рано.

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