iOS 8中横屏状态下UIWindow的尺寸与iOS 7不同

8

我创建了一个简单的模块,在其中向UIWindow添加子视图。在模拟器ios7(Xcode 5.1.1)中,我打印了self.windows,得到如下结果:

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

但是在iOS8(Xcode 6 beta 6)上,我收到了以下错误信息:
<UIWindow: 0x794320d0; frame = (0 0; 1024 768); gestureRecognizers = <NSArray: 0x79437a80>; layer = <UIWindowLayer: 0x7943c400>>

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

请看这里:https://dev59.com/amAf5IYBdhLWcg3w52Pm - Jageen
2个回答

11

可能在您的AppDelegate文件中,您会使用以下方式初始化您的UIWindow:

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

iOS8之前,UIScreen的bounds属性返回物理屏幕(即竖屏)的边界矩形,但是从iOS8开始,在设备旋转时,bounds会发生变化 文档

现在你可以使用nativeBounds来获取物理屏幕的边界矩形。

注意:nativeBounds返回像素表示的屏幕,而bounds返回点表示的屏幕。


0
我的解决方案就是忽略这个问题:
CGAffineTransformMakeRotation

在iOS8上,现在一切都对我有效了!谢谢:)


5
你如何做到这一点? - whyoz
回答并不是很有帮助。能否详细说明一下? - absessive

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接