我一直在努力更新一些应用程序以支持 iPhone 5。他们遇到了一些布局问题,这可能是由于 UIWindow 总是具有 iPhone 5 的框架,而不管它运行在什么设备上。例如,对于通用应用程序,即使在 iPad 上,UIWindow 的框架也会设置为 (0, 0, 320, 568)。我想知道是什么原因造成的,如果这真的是我应该关心的。
问问题
438 次
1 回答
1
我自己从未在通用应用程序上检查过这一点,但请确保:
窗口已经是视图层次结构的一部分。新创建的窗口不会帮助您确定大小(您说您
frame
在“-applicationDidFinishLaunching: 的开头”登录)。这
frame
只是一个合并bounds
和center
属性的访问器。如果将变换应用于视图(窗口),它就不能正常工作。但是,对于窗口,通常会应用变换。
窗口的 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);
(见技术说明 QA1703)
您可以看到最终frame
大小由bounds
和确定transform
。如果你做一些实验,你可以看到,例如,键盘窗口永远不会改变边界,即使设备方向改变了。纵向和横向方向之间的尺寸变化由transform
.
一般来说,window.rootViewController.bounds
是要走的路。
于 2013-06-05T08:23:32.573 回答