奇怪的行为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中执行代码。
这不是一个“技术性”的答案,但它为我做了这个工作。