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来获得正确的视图尺寸。正确的吗?
答案 0 :(得分:1)
在视图控制器的视图已正确调整大小之前调用viewDidLoad
方法。此时视图的大小显示不正常是正常的。
处理所有这些的适当位置是viewWillLayoutSubviews
。由于初始显示或由于方向更改,视图的大小和方向是最新的。这是您应该更新任何未通过某种自动布局正确处理的子视图。