在 iOS 8.3 中向 UIWindow 添加子视图

Posted

技术标签:

【中文标题】在 iOS 8.3 中向 UIWindow 添加子视图【英文标题】:Adding subview to UIWindow in iOS 8.3 【发布时间】:2015-08-13 21:12:04 【问题描述】:

在我的应用程序的一个地方,我在键窗口中添加了一个覆盖层作为覆盖层。在将我的 iPad 更新到停止工作的 8.4 之后。是否需要考虑在 ios 版本上进行了更改?

    UIApplication.sharedApplication().delegate?.window!!.addSubview(thankYouOverlayView)

PSthankYouOverlayView 可以作为子视图添加到 self.view,但我需要它位于顶层。

【问题讨论】:

当您说“停止工作”时,您的意思是它没有出现还是崩溃了? 在这个庄园添加一个覆盖很容易出错。这可能适用于 iOS 8.3,并且如您所述,在 8.4 中停止工作。您可能需要花费一些时间并创建一个适当的 UIViewController 类或类别来添加您的叠加层,而不是向应用程序的窗口添加子视图。作为建议的修复,仍然使用相同的方法可能适用于 iOS 8.4,但可能会在 iOS 9 中失败,让您回到第一方。 实际上需要在 uiwindows 中,因为当用户看到该布局时,呈现的 viewconrollers 会被关闭。 @Fennelousk 应用程序不会崩溃,但不会出现覆盖。 【参考方案1】:

正如其他人所说,直接添加到窗口通常不是一个好主意。你可以做到这一点,但最好有一个特定的视图和视图控制器来添加视图。

我发现有效的是创建一个循环来找到最顶层的视图和视图控制器并将视图添加到其中。从 iOS 6 到当前的 iOS 9 测试版,我从来没有遇到过这个问题。

【讨论】:

以上是关于在 iOS 8.3 中向 UIWindow 添加子视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 4 中向 UIView 添加子视图?

将 UIView 添加到 UIWindow 的子视图时未检测到画外音

UIWindow 在 addSubview 之后不更新子视图

作为 UIWindow 子视图添加的 UIView 不响应点击

我应该将底部工作表作为子视图添加到当前视图控制器还是推送添加了子视图的 UIWindow?

来自 UIWindow 的子视图并将其发送回 UIwindow