ios 8中的UIWindow框架与Landscape中的ios 7不同

edz*_*o27 8 uiwindow uiinterfaceorientation ios7 xcode6 ios8

我创建了一个简单的模块,我将子视图添加到UIWindow.在模拟器ios 7(Xcode 5.1.1)中,我打印了self.windows,我得到:

<UIWindow: 0x8db1670; frame = (0 0; 768 1024); autoresize = W+H; gestureRecognizers = <NSArray: 0x8db1a70>; layer = <UIWindowLayer: 0x8db17d0>>
Run Code Online (Sandbox Code Playgroud)

但在ios8(Xcode 6 beta 6)上,我得到:

<UIWindow: 0x794320d0; frame = (0 0; 1024 768); gestureRecognizers = <NSArray: 0x79437a80>; layer = <UIWindowLayer: 0x7943c400>>
Run Code Online (Sandbox Code Playgroud)

问题是:为什么帧属性存在差异?

fdi*_*iaz 10

可能在您的AppDelegate中,您可以像这样初始化UIWindow

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
Run Code Online (Sandbox Code Playgroud)

在iOS8之前,UIScreen的bounds属性返回了物理屏幕的边界矩形(即肖像),但是当设备旋转文档时,从iOS8边界开始更改.

如果您想获得物理屏幕的边界矩形,现在可以使用nativeBounds.

注意:nativeBounds以像素为单位返回屏幕,但bounds以磅为单位返回.