Subview не авторазмер при добавлении в контроллер Root View
У меня есть контроллер корневого представления, который будет иметь до 10 или около того subviews.
Я использую autorotation/autosize по всему приложению.
Моя проблема заключается в следующем:
- Когда я выделяю все контроллеры представлений и добавляю их как подчиненный в корневой контроллер во время запуска, все работает так, как должно. Единственная проблема заключается в том, что каждому контроллеру представления требуется время для инициализации. Это заставляет мое приложение загружаться очень медленно.
-
Вместо этого я пытаюсь выделить контроллеры представления так, как они нужны. Теперь я нахожу, что если приложение переходит в "Ландшафт", и я выделяю контроллер вида, который спроектирован в портрете, он будет авторотировать, но авторазбор не произойдет.
-
Другими словами, как только subview добавляется в корневой контроллер в портретном режиме, он вращается и правилен (и остается таким образом). Если subview добавляется, когда корневой контроллер находится в ландшафтном режиме, он вращается, но не выполняет автоматизацию (и размеры просмотра остаются испорченными, вращающимися назад к портрету).
-
Я пытался принудительно авторизовать, вызывая SetNeedsLayout, SetNeedsDisplay и LayoutIfNeeded, но ничего не работает. Я знаю, что я мог бы сделать это вручную, определив ориентацию корневых контроллеров и соответствующим образом изменив размер подвью, но это большая работа для того, что должно работать автоматически.
-
Я что-то пропустил? Любая помощь будет оценена по достоинству. Мой проект - это порт iPad из приложения iPhone, приложение iPhone не вращается, поэтому я не уверен, что это может быть что-то не так с бета-версией 3.2.
Ответы
Ответ 1
После долгой борьбы с этим я добавил следующий код в свой подзаголовок. Он выполняется после добавления представления в контроллер корневого представления. Пока это работает.
-
(void) AdjustFrame{
UIDeviceOrientation interfaceOrientation = [[UIDevice currentDevice] orientation];
if((interfaceOrientation == UIInterfaceOrientationLandscapeLeft)||(interfaceOrientation == UIInterfaceOrientationLandscapeRight))
{
CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame];
CGRect newFrame = CGRectMake(0.0, 0.0, applicationFrame.size.height, applicationFrame.size.width);
[self.view setFrame:newFrame];
[self.view setNeedsDisplay];
}
}