Вращение триггера в viewDidLoad

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

Например, я открываю вид в альбомном режиме после того, как он был повернут из портретного режима, когда я регистрирую поворот, он все еще возвращает портретный режим:

NSLog(@"%u", [[UIDevice currentDevice] orientation]); // 4
NSLog(@"%f / %f", self.view.frame.size.width, self.view.frame.size.height); // 748.000000 / 1024.000000

Когда я переворачиваю iPad в портретный режим и обратно в альбомный, он возвращает правильные размеры.

NSLog(@"%u", [[UIDevice currentDevice] orientation]); // 1
NSLog(@"%f / %f", self.view.frame.size.width, self.view.frame.size.height); // 1024.000000 / 704.000000

Что мне нужно сделать, чтобы новое добавленное представление адаптировалось к вращению?


person woutr_be    schedule 19.09.2012    source источник
comment
На данный момент я решил это, отслеживая ширину и высоту устройства в моем основном виде, возможно, не лучшее решение, но оно работает.   -  person woutr_be    schedule 19.09.2012


Ответы (3)


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

person Adam Emery    schedule 12.10.2012

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

if (UIInterfaceOrientationIsLandscape(orientation)) 
{

    [self.view setFrame:VIEW_LANDSCAPE_FRAME];

    //do more stuff

}
person Lena    schedule 19.09.2012
comment
Откуда orientation? Если я использую [[UIDevice currentDevice] orientation]], он все равно возвращает неправильное значение при добавлении в альбомном режиме. - person woutr_be; 20.09.2012

Попробуйте, как в этой ссылке. У меня это сработало. Лучше было бы сделать как в ссылке в willAppear, чем в viewDidLoad. Также убедитесь, что вы вернули желаемую ориентацию в методе shouldAutorotateToInterfaceOrientation и установили правильный ключ UIInterfaceOrientation в info.plist.

person Ananth    schedule 20.09.2012