覆盖视图控制器的视图,包括导航栏,但是当我添加子视图时它消失了

Posted

技术标签:

【中文标题】覆盖视图控制器的视图,包括导航栏,但是当我添加子视图时它消失了【英文标题】:View that covers viewController including navigation bar, but when I add subview it disappears 【发布时间】:2016-09-08 16:41:19 【问题描述】:

        let appDelegate = (UIApplication.sharedApplication().delegate! as! AppDelegate)
        let backgrView = UIView(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.size.width, UIScreen.mainScreen().bounds.size.height))
        backgrView.backgroundColor = UIColor.blackColor()
        backgrView.alpha = 0.6
        appDelegate.window!.addSubview(backgrView)

上面的代码允许我创建一个覆盖整个屏幕的视图,甚至是导航控制器

但是当我在backgrView下面添加代码时消失了:

let sampleview = UIView(frame: CGRectMake(0, 0, 10.0, 10.0))
        sampleview.addSubview(backgrView)

如何向backgrView添加视图??

【问题讨论】:

我建议使用View Debugger 看看你的backgrView 是否存在,如果存在,它是否有一些奇怪的frame 值,被另一个视图挡住了,或者其他什么。如果你暂时给这个视图一个唯一的tag 数值(或一些自定义的UIView 子类),这将帮助你更容易地识别它。 【参考方案1】:

Sampleview 甚至没有添加到视图层次结构中,因此您可以添加 backgrView。 试试这个:

    let sampleview = UIView(frame: CGRectMake(0, 0, 10.0, 10.0))
    backgrView.addSubview(sampleview)

或者这个:

    let appDelegate = (UIApplication.sharedApplication().delegate! as! AppDelegate)
    let backgrView = UIView(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.size.width, UIScreen.mainScreen().bounds.size.height))
    backgrView.backgroundColor = UIColor.blackColor()
    backgrView.alpha = 0.6
    appDelegate.window!.rootViewController!.view.addSubview(backgrView)
    let sampleview = UIView(frame: CGRectMake(0, 0, 10.0, 10.0))
    backgrView.addSubview(sampleview)

【讨论】:

【参考方案2】:

你的代码是倒退的:

    sampleview.addSubview(backgrView)

你的意思是:

    backgrView.addSubview(sampleview)

【讨论】:

以上是关于覆盖视图控制器的视图,包括导航栏,但是当我添加子视图时它消失了的主要内容,如果未能解决你的问题,请参考以下文章

如何添加覆盖所有其他视图(包括导航栏和状态栏)的暗屏?

模态显示的表格视图没有导航栏

推送视图控制器中的半透明导航栏覆盖?

滚动视图和导航栏 ios9

视图控制器之间的自定义转换,包括导航栏

弹出到根视图控制器时导航栏消失