Ios LoadVIew()中的UIVisualEffectView
我正在尝试将visualEffect添加到一个视图中,该视图在iOS10和以前的版本上运行良好。。。但在iOS 11上它崩溃了。错误原因如下:Ios LoadVIew()中的UIVisualEffectView,ios,ios11,swift4,xcode9,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 v
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."
奇怪的是,当我在viewDidload中添加此代码时,它正在传递崩溃。。。请任何人帮助我了解主要问题,或者我是否遗漏了iOS11方面的任何内容。我们不应该从
loadView
函数调用super.loadView()
如果使用Interface Builder创建视图并初始化
视图控制器,则不能重写此方法
我们有一些类似的东西,并通过将代码移出
loadView
方法来修复它。因为loadView用于构造视图,而不是您想要自定义视图的时间点。我们不应该从loadView
函数调用super.loadView()
如果使用Interface Builder创建视图并初始化
视图控制器,则不能重写此方法
我们有一些类似的东西,并通过将代码移出
loadView
方法来修复它。由于loadView用于构建视图,而不是您希望自定义视图的时间点。出于所有目的,您不应覆盖loadView或自己调用它。相反,您应该重写awakeFromNib()或viewDidLoad(),以便在视图显示在屏幕上之前对其进行进一步自定义
您还可以在视图出现在视图中的任何位置之前对视图进行最后一秒的润色(动画:)
祝你好运 无论出于何种目的,您都不应该覆盖loadView或自己调用它。相反,您应该重写awakeFromNib()或viewDidLoad(),以便在视图显示在屏幕上之前对其进行进一步自定义 您还可以在视图出现在视图中的任何位置之前对视图进行最后一秒的润色(动画:)
祝你好运 您是否按照@Hani Ibrahim的建议尝试删除super.loadView()?我现在就这么做了。。但出于某种原因,它在loadView()中进入了一个无限循环,请尝试创建一个新的UIView并将其分配给self.view。这将解决问题。你是说uiview作为可视化的容器,然后将它们全部添加到根目录?@hegab我认为它进入了一个无限循环,因为在视图未加载时调用
view
,可能会导致调用loadView
来加载视图,因此你是否尝试删除super.loadView()正如@Hani Ibrahim所建议的那样?我现在就这么做了。。但出于某种原因,它在loadView()中进入了一个无限循环,请尝试创建一个新的UIView并将其分配给self.view。这将解决问题。你是说uiview作为可视化的容器,然后将它们全部添加到根目录中?@hegab我认为它进入了一个无限循环,因为在视图未加载时调用视图
,可能会导致调用加载视图
,以此类推
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
}