2017-09-26 80 views
0

我试图将visualEffect添加到在iOS10和以前版本上正常工作的视图中......但在iOS 11上它崩溃了。UIVisualEffectView LoadVIew()

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

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

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

如果您使用Interface Builder来创建你的意见和初始化 视图控制器,你不能重写此方法。

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

+0

不,我不是..它完全来自代码 –

+0

您是否按照@Hani Ibrahim的建议去除super.loadView()? – Rishi

+0

我现在做了..但它进入loadView()出于某种原因的infinit循环 –

1

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

您也可以在viewWillAppear(动画:)的任何位置出现之前触摸到您的视图。

祝你好运!