我正在开发一个iOS应用程序(原始代码不是我的)。下面的代码在iOS 9/10中运行良好,但在iOS 11上它进入无限循环调用
addSubview
。
import UIKit
class BlurView: UIVisualEffectView {
var isRounded: Bool
init(style: UIBlurEffectStyle, isRounded: Bool = true) {
self.isRounded = isRounded
super.init(effect: UIBlurEffect(style: style))
setupInterface()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func addSubview(_ view: UIView) {
guard view !== contentView else {
super.addSubview(view)
return
}
contentView.addSubview(view)
}
}
如果我将行super.init(effect: UIBlurEffect(style: style))
中的效果参数替换为nil
,它可以正常工作(当然,没有模糊)。
附加信息:在addSubView内部,我无法访问contentView
属性,这似乎是创建堆栈溢出问题的属性。在init上,它看起来像是在内部使用,而这就是它破坏的地方。
问题是: 为什么这适用于iOS 9/10而不是iOS 11? 如何在iOS 11上完成这项工作?