self.view.frame неожиданно изменил размер в альбомном режиме - PullRequest
3 голосов
/ 21 августа 2010

Я настроил вид контроллера представления через IB. Вид настроен на альбомную ширину 480 и высоту 320. Он корректно загружен в симуляторе. Однако, когда я проверил self.frame.size с помощью NSLog, я обнаружил, что размер кадра изменился сам без какого-либо поворота устройства или какого-либо кода. Вот что я получаю:

В viewDidLoad -> размер = 480 х 320

В представленииWillAppear -> размер = 480 х 320

В viewDidAppear -> размер = 320 х 480

У меня есть только коды в viewDidLoad, но нет ни viewWillAppear, ни viewDidAppear. Кто-нибудь знает, что произошло за сценой? Спасибо.

1 Ответ

14 голосов
/ 21 августа 2010

Попробуйте что-то вроде этого:

NSLog("frame=%@ transform=%@", NSStringFromCGRect(self.frame), NSStringFromCGAffineTransform(self.transform));

Готов поспорить, что преобразование - это тождество (1,0,0,1,0,0), когда размер кадра составляет 480x320, а 90° Поворот (0,1, -1,0,0,0 или 0, -1,1,0,0,0) при размере кадра 320x480.

Что происходит?

* 1007Хорошо, viewDidLoad (и я думаю viewWillAppear) вызывается до того, как представление добавляется в иерархию представлений.Когда он добавляется в иерархию, UIKit также устанавливает преобразование вида, как происходит вращение.

Но почему это меняет кадр?

Что ж, «кадр» относится кродительское представление, которое является UIWindow.Окно не вращается;вид контроллера представления делает.С точки зрения окна, все эффективно в портретном режиме.

Вы, вероятно, хотите self.view.bounds.

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