如何在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]现在是面向接口的
- 状态栏框架通知是面向接口的
- 键盘帧通知是面向接口的