访问contentView的UIVisualEffectView堆栈溢出

时间:2017-11-01 19:16:47

标签: ios

我正在开发一个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上完成这项工作?

0 个答案:

没有答案