代码之家  ›  专栏  ›  技术社区  ›  Osama Naeem

我希望UIView覆盖整个屏幕,甚至导航栏,但显示其子视图

  •  4
  • Osama Naeem  · 技术社区  · 7 年前

    如何使UIView覆盖整个屏幕。我有一个黑色的UIView,它的alpha值是0.5。它还有一个子视图。现在,blackView位于导航栏下方。我希望它覆盖整个屏幕,包括导航栏。

    如下图所示。弹出视图后面的深色视图应覆盖整个屏幕。 我对视图使用的约束很简单:

    view.addsubView(blackView)
    
    _ = blackview.anchor(view.topAnchor, left: view.leftAnchor, bottom: view.bottomAnchor, right: view.rightAnchor, topConstant: 0, leftConstant: 0, bottomConstant: 0, rightConstant: 0, widthConstant: 0, heightConstant: 0)
    

    弹出窗口是blackView的子视图:

    blackView.addSubview(reminderPopUpView) 
    

    我该怎么做?

    4 回复  |  直到 5 年前
        1
  •  8
  •   Lauri Nurmi    3 年前

    只需将黑色视图添加为窗口子视图即可。

    UIApplication.shared.keyWindow?.addSubview(blackView)
    
        2
  •  4
  •   Patrick R    7 年前

    请按照以下步骤解决问题:

    1>创建您的 UIView 使用要覆盖的插座,让我们调用它 viewOverLay

    2>使用下面的代码覆盖该视图以覆盖整个屏幕甚至导航栏

    self.navigationController?.view.addSubview(self.viewOverLay) 
    self.viewOverLay.frame.size.height = (self.navigationController?.view.bounds.height)! 
    self.viewOverLay.alpha = 0.0
    

    3>当你想展示的时候

    UIView.animate(withDuration: 0.3) { self.viewOverLay.alpha = 1.0 } 
    

    4>当你想隐藏它的时候

    UIView.animate(withDuration: 0.3) { self.viewOverLay.alpha = 0.0 }
    

    如果对你有用,请告诉我。

        3
  •  4
  •   valosip    3 年前

    将视图添加到窗口的子视图,如下所示:

    let mainWindow = UIApplication.sharedApplication().keyWindow!
    let overlayview = UIView(frame: CGRect(x: mainWindow.frame.origin.x, y: mainWindow.frame.origin.y, width: mainWindow.frame.width, height: mainWindow.frame.height))
    mainWindow.addSubview(overlayview);
    

    您可以根据需要调整其背景色和alpha。

        4
  •  3
  •   ivoroto    6 年前

    在我的例子中,使用autolayout在新的UIViewController上绘制popupView更容易,然后使用全屏淡入显示:

    if let popupVC = UIStoryboard(name: "Popup", bundle: nil).instantiateViewController(withIdentifier: "PopupVC") as? PopupVC {
            popupVC.parentVC = self
            popupVC.modalPresentationStyle = UIModalPresentationStyle.custom
            popupVC.modalTransitionStyle = UIModalTransitionStyle.crossDissolve
            present(popupVC, animated: true, completion: nil)
    }
    

    用这条线 popupVC.parentVC = self 我正在将当前的UIViewController(称为parentVC)传递给popupVC。这样,当popupVC被解除时,我可以将数据传递回其父级。 使用委托也可以做到这一点,这取决于解耦对您的价值。