将子视图置于一切之上,但低于另一个 UIView
Posted
技术标签:
【中文标题】将子视图置于一切之上,但低于另一个 UIView【英文标题】:Bring Subview Above Everything But Below Another UIView 【发布时间】:2016-05-31 20:25:19 【问题描述】:我试图在顶部放置一个UIView
- popupView,在 popupView 下方放置另一个 UIView
(opaqueView),但高于其他任何东西。 PopUpView 与 Outlet 相连。
func display()
popupView.center = CGPointMake(CGRectGetMidX(self.view.bounds), tableView.center.y);
self.view.addSubview(popupView)
popupView.clipsToBounds = true
let opaqueView = UIView()
let screenSize: CGRect = UIScreen.mainScreen().bounds
opaqueView.frame.size = CGSize(width: screenSize.width, height: screenSize.height)
opaqueView.alpha = 0.6
UIApplication.sharedApplication().keyWindow!.insertSubview(opaqueView, belowSubview: popupView)
使用这种方法会导致 opaqueView 被放置在包括 popupView 在内的所有内容上。相反,我希望将 popupView 放在 opaqueView 之上,但将 opaqueView 放在其他一切之上 (view, TabBar, NavBar)
【问题讨论】:
为什么将popupView
添加到self.view
而将opaqueView
添加到keyWindow
?
因为,如果我不将opaqueView
添加到keyWindow
,opaqueView
不会超过 TabBar 和 NavigationBar。
为什么不将 popupView 也添加到 keyWindow 中?
这就是答案。非常感谢!
【参考方案1】:
parent.insertSubview(child, belowSubview: sibling)
仅在sibling
是parent
的直接子代时有效,因此child
和sibling
共享同一个父代。当前代码不起作用,因为opaqueView
(孩子)和popupView
(兄弟)有不同的父母。
这意味着①popupView
应该使用keyWindow
作为父级,或者②opaqueView
应该使用self.view
作为父级。既然你想让opaqueView
凌驾于一切之上,那么选项①是唯一的解决方案。
【讨论】:
以上是关于将子视图置于一切之上,但低于另一个 UIView的主要内容,如果未能解决你的问题,请参考以下文章