0
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 来获得正确的视图尺寸。正确的?

4

1 回答 1

1

在正确调整视图控制器的视图大小之前调用该viewDidLoad方法。此时视图大小显示不正确是正常的。

处理所有这些问题的正确位置是viewWillLayoutSubviews. 由于初始显示或方向更改,视图的大小和方向是最新的。这是您应该更新任何未通过某种自动布局正确处理的子视图的地方。

于 2013-01-05T04:26:13.293 回答