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

时间:2018-01-13 09:58:24

标签: ios iphone swift uiview screen

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

如下图所示。弹出视图后面的黑暗视图应覆盖整个屏幕。 我用于视图的约束很简单:

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 个答案:

答案 0 :(得分:3)

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

OpenQA.Selenium.NoSuchElementException: 'no such element'

答案 1 :(得分:2)

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

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值。

答案 2 :(得分:2)

按照以下步骤解决您的问题:

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 :(得分:1)

对于我来说,使用自动布局在新的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被关闭时,我可以将数据传递回其父级。 使用委托可以完成相同的工作,这取决于您需要进行多少次去耦。