UIVisualEffectView LoadVIew()
问题描述:
我试图将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的任何内容。
答
我们不应该从loadView
函数调用super.loadView()
。
https://developer.apple.com/documentation/uikit/uiviewcontroller/1621454-loadview
如果您使用Interface Builder来创建你的意见和初始化 视图控制器,你不能重写此方法。
我们有类似的东西,并通过将代码移出loadView
方法来解决它。因为loadView用于构建视图,而不是您想要自定义视图的时间点。
答
对于所有意图和目的,您绝不应该重载loadView或自己调用它。您应该改为覆盖awakeFromNib()或viewDidLoad()以在视图显示在屏幕上之前进一步自定义视图。
您也可以在viewWillAppear(动画:)的任何位置出现之前触摸到您的视图。
祝你好运!
不,我不是..它完全来自代码 –
您是否按照@Hani Ibrahim的建议去除super.loadView()? – Rishi
我现在做了..但它进入loadView()出于某种原因的infinit循环 –