奇怪的行为UIView的高度被改变

我遇到了我认为是奇怪的行为。 如果有人能够澄清这一点,这将是很好的。

在viewDidLoad中,最初我打印UIView边界的高度和宽度,就像这样

-(void) viewDidLoad { NSLog(@"WxH = %fx%f", self.view.bounds.size.width,self.view.bounds.size.height); } 

打印出: WxH = 320.000000x548.000000

现在,说我把视图控制器旋转到风景 – 然后回到肖像,并打印相同的高度和宽度。 喜欢这个:

 - (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)x duration:(NSTimeInterval)duration { // If the orientation is rotating to Portrait mode... if (UIInterfaceOrientationIsPortrait(x)) { NSLog(@"WxH = %fx%f", self.view.bounds.size.width,self.view.bounds.size.height); } else // If the orientation is rotating to Landscape mode { } } 

之后,每当我旋转,上面的方法打印WxH = 320.000000x460.000000 (即使我在肖像模式,因为我在开始时,它打印548)为什么高度改变为460? (然后它一直这样下去)

肖像的iPhone高度总计480,20为self.view状态栏剩余460。

您可以更好地查看日志

 NSLog(@"%@",NSStringFromCGRect(self.view.bounds)); 

这似乎是因为

分辨率是点,而不是像素。 您的代码应该使用点,以便它可以在任何设备上运行 – 视网膜或非视网膜。 (为了澄清 – 在视网膜显示器上,每个屏幕像素是0.5×0.5点,在非视网膜上,像素是这个尺寸的两倍,1×1点)

而不是在ViewDidLoad中获取/设置边界/大小,在ViewWillAppear中执行代码。

这不是一个“技术性”的答案,但它为我做了这个工作。