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

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

在上面, view.height 总是 1024,不pipe设备在哪个方向。即使旋转设备也会导致viewDidLayoutSubviews被调用,并且仍然会输出1024。

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

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

引用Apple的 transform属性的文档 :

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

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

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