将子视图置于一切之上,但置于另一个 UIView 之下

Bring Subview Above Everything But Below Another UIView

我试图将一个 UIView - popupView 放在顶部,另一个 UIView (opaqueView) 在 popupView 下面但在其他任何东西之上。 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)

parent.insertSubview(child, belowSubview: sibling) 仅当 siblingparent 的直接 child 时有效,因此 childsibling 共享相同parent。当前代码不起作用,因为 opaqueView(child)和 popupView(sbiling)具有不同的 parent。

这意味着①popupView应该使用keyWindow作为parent,或者②opaqueView应该使用self.view作为parent .既然你想要opaqueView凌驾于一切之上,选项①是唯一的解决方案。