定位似乎与维度冲突

时间:2013-01-05 02:50:16

标签: ios orientation landscape viewdidload portrait

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 个答案:

答案 0 :(得分:1)

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

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