2013-10-21 25 views
2
- (void)viewDidLayoutSubviews { 
    [super viewDidLayoutSubviews]; 
    NSLog(@"viewDidLayoutSubviews view.height: %f", self.view.frame.size.height); 
} 

在上面,view.height总是 1024,不管设备是什么方位,即使旋转设备会导致viewDidLayoutSubviews被调用,它仍然会输出1024如何在viewDidLayoutSubviews中获得正确的视图高度?

然而,视图呈现精细。我错过了什么?

+0

你认为高度是多少? –

+0

你如何得到view.height?你有UIView类别吗?哪个视图/视图控制器是这样的?这是你的根视图控制器吗? –

+0

@SimonGoldeen对不起,忘了解决。它是根据框架定义的。是的,它是根视图控制器。 – devios1

回答

5

当iOS执行自动旋转时,它不会更改根视图控制器视图的frame属性。它所做的是应用变换并为变换变化设置动画。要查看视图的“实际”大小,请检查bounds属性,而不是frame属性。

引述transform财产Apple's documentation

警告:如果此属性不是恒等变换,框架属性的值是不确定的,因此应被忽略。

+0

谢谢!这似乎是一个非常奇怪的设计选择。我是否认为这只是*根视图控制器上的情况? – devios1

+1

@chaiguy如果您对某个视图应用了转换,则会发生同样的情况。其框架将不再必然反映其大小或位置。关于苹果为什么这样做,这是因为旋转动画是通过动画变换变化来实现的(或者我假设)。 –

0

我认为是iOS8更新的时候了。在iOS8上:

  • UIScreen现在接口取向:
  • [UIScreen边界现在接口为本
  • [UIScreen applicationFrame]现在接口为本
  • 状态栏框通知是接口为本
  • 键盘帧通知是面向接口的
相关问题