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

在上面,无论设备处于什么方向,始终为 1024。即使旋转设备也会导致view.height被调用,它仍然会输出 1024。viewDidLayoutSubviews

然而,视图渲染得很好。我到底错过了什么?

4

2 回答 2

5

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

引用Apple 的财产transform文档:

警告:如果此属性不是恒等变换,则 frame 属性的值未定义,因此应被忽略。

于 2013-10-21T22:02:37.213 回答
0

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

  • UIScreen 现在是面向界面的:
  • [UIScreen bounds] 现在面向界面
  • [UIScreen applicationFrame] 现在面向界面
  • 状态栏框架通知是面向界面的
  • 键盘框架通知是面向界面的
于 2015-12-27T14:28:38.897 回答