Ориентация кажется конфликтующей с измерениями
if(UIInterfaceOrientationIsPortrait(self.interfaceOrientation)) {
NSLog(@"Device is in portrait");
} else if(UIInterfaceOrientationIsLandscape(self.interfaceOrientation)){
NSLog(@"Device is in landscape");
}
NSLog(@"View bounds are %@",NSStringFromCGRect(self.view.bounds));
Я вызываю этот код из viewDidLoad, а затем из распознавателя жестов. В ландшафтном режиме вывод из viewDidLoad:
2013-01-04 20:44:48.925 293 Calendar[2638:907] Device is in landscape
2013-01-04 20:44:48.926 293 Calendar[2638:907] View bounds are {{0, 0}, {748, 1024}}
Когда вызывается из распознавателя жестов смахивания, вывод:
2013-01-04 20:44:58.002 293 Calendar[2638:907] Device is in landscape
2013-01-04 20:44:58.004 293 Calendar[2638:907] View bounds are {{0, 0}, {1024, 748}}
Если устройство находится в горизонтальной ориентации оба раза, почему размеры противоположны? Должен ли я смотреть на размеры представления в другом месте, кроме viewDidLoad? Что это будет за событие?
Я пробовал viewWillAppear, и он был таким же, как viewDidLoad. Я попробовал viewDidAppear, и он был таким же, как и из распознавателя жестов. Поэтому я предполагаю, что это то, что я должен использовать вместо viewDidLoad для правильных размеров представления. Правильный?
1 ответ
viewDidLoad
Метод вызывается до того, как представление контроллера представления было правильно измерено. В настоящее время размер представления может отображаться неправильно.
Надлежащее место, чтобы иметь дело со всем этим является viewWillLayoutSubviews
, Размер и ориентация вида обновляются в результате первоначального отображения или из-за изменения ориентации. Здесь вы должны обновить любые подпредставления, которые не обрабатываются должным образом с помощью какого-либо автоматического макета.