如何在 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 的视图层次结构顶部添加视图?的主要内容,如果未能解决你的问题,请参考以下文章