Контроллер вида находится в ландшафтном режиме, но я получаю кадр из портретного режима? - PullRequest
4 голосов
/ 03 октября 2011

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

Однако, когда загружается контроллер представления настроек, представление таблицы имеет рамку портретного режима контроллера представления, даже если оно находится в альбомной ориентации.(360 на 480, когда оно должно быть 480 на 360).

Кроме того, когда я проверил, считает ли устройство, что оно находится в портретном режиме, он вернул значение true.

Что вызываетпроблема и как я могу это исправить?

Ответы [ 3 ]

4 голосов
/ 03 октября 2011

при вызове [UIView init] по умолчанию будет установлен размер экрана вашего устройства в портретном режиме (то же самое относится и к iPad, но с большим размером).Внутри [UIViewController viewDidLoad] self.view по умолчанию также будет иметь этот размер.

Поворот экрана выполняется только для вида сверху (контроллера) в вашей иерархии, а сообщения ротации передаются через контейнеры-VC, которые поддерживают это поведение (например, UINavigationController, UITabBarController).

Если вы хотите, чтобы ваш вид имел правильный размер, используйте [UIView initWithFrame:self.view.bounds] для его создания.Insinde UIViewController у вас есть только возможность переопределить метод loadView, чтобы установить фрейм до вызова viewDidLoad (или вы можете использовать другой XIB для ландшафта).Вы также можете жестко закодировать размер представления, предварительно установив его кадр в viewDidLoad

0 голосов
/ 06 февраля 2012

Вы можете использовать viewWillAppear для изменения размера ваших представлений, прежде чем они отобразят

0 голосов
/ 03 октября 2011

Вы должны реализовать это в своем контроллере просмотра настроек: -

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationPortrait];
    }
...