如何在 Swift 的视图层次结构顶部添加视图?

Posted

技术标签:

【中文标题】如何在 Swift 的视图层次结构顶部添加视图?【英文标题】:How to add view in top of view hierarchy in Swift? 【发布时间】:2016-05-08 08:44:14 【问题描述】:

我一直在用这个:

UIApplication.sharedApplication().keyWindow?.rootViewController!.view.addSubview(self.customView)

在应用中的视图层次结构中的所有视图上添加模式视图。

但这给我带来了问题。它有时会按预期添加子视图,但有时它不起作用。 在什么情况下这不起作用以及在 UIAlertView 等视图层次结构中添加模式视图的最佳方法是什么。

【问题讨论】:

当它不起作用时,这些情况是什么?您是否检查了视图层次结构?您是否为添加的自定义视图设置了正确的frame 其实它只是偶尔发生。而且我未能在模拟器中重新创建问题。但是,当我不是在调试时而是随机地为手机创建构建时,就会出现问题。所以我无法检查视图层次结构。 理论上。当我们在 Keywindow 中将视图添加到 rootViewController 的视图时,它应该位于层次结构的顶部不是吗? 理论上它应该这样工作。但是在呈现 UIAlert 或 UIActionSheet 时,关键窗口可能会发生变化。但这似乎不是你的情况。 添加该视图后,还要执行view.bringSubviewToFront(theSubview) 【参考方案1】:

根据发生的情况,一次可以有多个 UIWindow - 例如,如果出现系统警报,您将有两个单独的窗口(一个用于视图控制器,一个用于警报本身)。 可以为系统键盘制作类似的示例。如果键盘有焦点,那将是你的 keyWindow。

确保您在所有窗口之上添加子视图的方法可能是:UIApplication.sharedApplication().windows.last?.addSubview(yourSubView)

我还看到有人使用应用程序委托,使用:UIApplication.sharedApplication().delegate?.window

【讨论】:

以上是关于如何在 Swift 的视图层次结构顶部添加视图?的主要内容,如果未能解决你的问题,请参考以下文章

将 UIView 添加为子视图并在 Swift 中确定它们在视图层次结构中的位置

将滚动视图添加到集合视图层次结构

如何将视图带到 UIView 层次结构的顶部

Swift,约束,视图层次结构没有为约束做好准备

如何在我的触摸位置获取层次结构中的所有视图 - Swift

以编程方式将 UIScrollView 滚动到 Swift 中的子 UIView(子视图)的顶部