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

时间:2016-05-31 20:25:19

标签: ios swift uiview addsubview

我正在尝试在顶部放置一个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在内的所有内容上。相反,我希望在opaqueView上方使用popupView,但将opaqueView保持在其他所有内容(view,TabBar,NavBar)

1 个答案:

答案 0 :(得分:1)

parent.insertSubview(child, belowSubview: sibling)仅在siblingparent的直接子项时才有效,因此childsibling共享同一个父级。当前代码不起作用,因为opaqueView(孩子)和popupView(sbiling)有不同的父母。

这意味着①popupView应该使用keyWindow作为父级,或者②opaqueView应该使用self.view作为父级。由于您希望opaqueView超越所有内容,因此选项①是唯一的解决方案。