iOS:以编程方式创建 UIWindow 导致位置错误

Posted

技术标签:

【中文标题】iOS:以编程方式创建 UIWindow 导致位置错误【英文标题】:iOS: Programmatically creating UIWindow results in wrong position 【发布时间】:2012-09-24 20:48:25 【问题描述】:

ios 5.1.1 中,我发现如果我创建我的 UIWindow(我厌倦了 IB),并将其框架设置为 [UIScreen mainScreen].bounds,窗口会显示在状态栏下方 。但是,如果我在 iOS 6 上做同样的事情,它会出现在状态栏下方的正确位置。

CGRect r = [[UIScreen mainScreen] bounds];
self.window = [[UIWindow alloc] initWithFrame: r];
self.detailViewController = [[DetailViewController alloc] init];
self.window.rootViewController = self.detailViewController;
[self.window addSubview: detailViewController.view];
[self.window makeKeyAndVisible];

如果我插入 r.origin.y += 20,将窗口移动到 iOS 5.1.1 的状态栏下方,这并不能解决问题,而且事情只会变得更奇怪。

在以编程方式创建 UIWindow 时,在 iOS 中放置 UIWindow 的正确方法是什么? 谢谢。

【问题讨论】:

我相信如果你回到 IB,你的问题会少很多。我最近尝试用代码修复布局问题,但花了几个小时。我让它工作了,但后来尝试只用 IB 做同样的事情,点击几下后它的工作效果甚至比我的手动编码更好。我了解到最好使用这些工具。否则你会遇到难以解决的极端情况。 【参考方案1】:

您需要使用[[UIScreen mainScreen] applicationFrame],而不是[[UIScreen mainScreen] bounds]。这将是状态栏下方的屏幕区域(如果可见)。

【讨论】:

【参考方案2】:

我认为你可能需要这样做:

self.window.windowLevel = UIWindowLevelStatusBar + 1;

【讨论】:

以上是关于iOS:以编程方式创建 UIWindow 导致位置错误的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 以编程方式创建视图问题,无法找到存储的属性

iOS以编程方式添加约束导致错误

以编程方式在iOS中使用状态栏捕获完整屏幕截图

iOS 8 - UIWindow 方向总是纵向的

iOS App 正在创建两个 UIWindow

UIWindow endDisablingInterfaceAutorotationAnimated 错误仅在 iOS9 中从 collectionView 中以交互方式关闭键盘时出现在控制台中