我一直致力于更新一些应用程序以支持 iPhone 5。它们存在一些布局问题,这可能是因为 UIWindow 始终具有 iPhone 5 的框架,而不管它运行在什么设备上。例如,对于通用应用程序,即使在 iPad 上,UIWindow 的框架也会设置为 (0, 0, 320, 568)。我想知道是什么原因造成的,这是否真的是我应该关心的问题。
最佳答案
我自己从未在通用应用程序上检查过这一点,但请确保:
窗口已经是 View 层次结构的一部分。新创建的窗口不会帮助您确定大小(您说您记录
frame
“在 -applicationDidFinishLaunching: 的开头”)。frame
只是一个访问器,它合并了bounds
和center
属性。如果将转换应用于 View (窗口),它就无法正常工作。但是,对于窗口,通常会应用转换。
窗口的 iOS 绘图代码类似于以下内容:
CGContextSaveGState(context);
CGContextTranslateCTM(context, [window center].x, [window center].y);
CGContextConcatCTM(context, [window transform]);
CGContextTranslateCTM(context,
-[window bounds].size.width * [[window layer] anchorPoint].x,
-[window bounds].size.height * [[window layer] anchorPoint].y);
[[window layer] renderInContext:context];
CGContextRestoreGState(context);
您可以看到最终的frame
大小是由bounds
和transform
决定的。如果你做了一些实验,你会发现,例如,键盘窗口永远不会改变边界,即使设备方向发生变化也是如此。纵向和横向方向之间的大小变化由 transform
决定。
一般来说,window.rootViewController.bounds
是可行的方法。
关于ios - 什么决定了window.frame?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16933391/