1

我一直在努力更新一些应用程序以支持 iPhone 5。他们遇到了一些布局问题,这可能是由于 UIWindow 总是具有 iPhone 5 的框架,而不管它运行在什么设备上。例如,对于通用应用程序,即使在 iPad 上,UIWindow 的框架也会设置为 (0, 0, 320, 568)。我想知道是什么原因造成的,如果这真的是我应该关心的。

4

1 回答 1

1

我自己从未在通用应用程序上检查过这一点,但请确保:

  1. 窗口已经是视图层次结构的一部分。新创建的窗口不会帮助您确定大小(您说您frame在“-applicationDidFinishLaunching: 的开头”登录)。

  2. frame只是一个合并boundscenter属性的访问器。如果将变换应用于视图(窗口),它就不能正常工作。但是,对于窗口,通常会应用变换。

窗口的 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 回答