LoadVIew() 中的 UIVisualEffectView

UIVisualEffectView In LoadVIew()

我正在尝试将 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.[=12 中的任何内容=]

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

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

If you use Interface Builder to create your views and initialize the view controller, you must not override this method.

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

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

您还可以在视图出现在 viewWillAppear(animated:) 中的任何位置之前对其进行最后一秒润色。