如何在viewDidLayoutSubviews中获得正确的视图高度?

时间:2013-10-21 21:50:07

标签: ios objective-c cocoa-touch viewdidlayoutsubviews

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

在上文中,view.height 总是 1024,无论设备处于什么方向。即使旋转设备也会导致viewDidLayoutSubviews被调用,但仍然会输出1024。

然而,这种观点很好。我错过了什么?

2 个答案:

答案 0 :(得分:5)

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

引用transform属性的Apple's documentation

  

警告:如果此属性不是标识转换,则frame属性的值未定义,因此应忽略。

答案 1 :(得分:0)

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

  • UIScreen现在面向接口:
  • [UIScreen bounds]现在面向接口
  • [UIScreen applicationFrame]现在面向接口
  • 状态栏框架通知是面向接口的
  • 键盘框架通知是面向接口的