LoadVIew()中的UIVisualEffectView

时间:2017-09-26 10:40:34

标签: ios ios11 swift4 xcode9

我正在尝试将visualEffect添加到一个在iOS10和之前版本上工作正常的视图......但是在iOS 11上崩溃了。错误原因如下:

 has been added as a subview to <UIVisualEffectView: 0x7feabe90d170; frame = (0 0; 375 812); layer = <CALayer: 0x6000006257c0>>. Do not add subviews directly to the visual effect view itself, instead add them to the -contentView."

我正在使用以下代码:

 override func loadView() { 
    super.loadView()

    // create the blur view
    let blurView = UIVisualEffectView(effect: effect)
    if let oldView = view {
        blurView.frame = view.frame
        oldView.translatesAutoresizingMaskIntoConstraints = false
        blurView.contentView.addSubview(oldView)
        blurView.contentView.pinParentAllDirections(oldView)
    }
    view = blurView
}

奇怪的是,当我在viewDidload中添加此代码时,它正在通过崩溃...任何人请帮助我理解主要问题或者我错过了iOS11中的任何内容。

2 个答案:

答案 0 :(得分:2)

我们不应该从super.loadView()函数调用loadView

https://developer.apple.com/documentation/uikit/uiviewcontroller/1621454-loadview

  

如果使用Interface Builder创建视图并初始化   视图控制器,您不能覆盖此方法。

我们有类似的东西并通过将代码移出loadView方法来修复它。因为loadView用于构建视图,而不是您想要自定义视图的时间点。

答案 1 :(得分:1)

出于所有意图和目的,您不应该覆盖loadView或自己调用它。您应该覆盖awakeFromNib()或viewDidLoad(),以便在屏幕上显示之前进一步自定义视图。

您还可以在视图出现在viewWillAppear(动画:)中的任何位置之前,继续进行第二次触摸视图。

祝你好运!