正在覆盖UIStackView背景颜色变量



我震惊地发现,从iOS14开始,就可以为UIStackView设置背景颜色。在旧版本中,这种尝试被忽略了
我也必须支持旧版本,所以我写了这段代码来解决这个问题:

public extension UIStackView {
private var helperSubview: UIView {
subviews.first(where: { $0.id == "helperSubview" }) ?? {
let hsv = UIView()
hsv.id = "helperSubview"
insertSubview(hsv, at: 0)
hsv.fillSuperview()
return hsv
}()
}
override var backgroundColor: UIColor? {
didSet {
if #available(iOS 14.0, *) {
return
} else {
helperSubview.backgroundColor = backgroundColor
}
}
}
}

代码运行良好
但有一个奇怪的时刻:在iOS14中,didSet根本没有启动(就像我们甚至可以不检查#可用性一样(。这很适合我,这种行为不会造成任何问题。但我不明白为什么它会这样?

不能使用扩展来覆盖类属性。如果要覆盖任何属性或方法,则需要对UIStackView进行子类化。

来自文档:

扩展可以为类型添加新功能,但不能覆盖现有功能

相关内容

  • 没有找到相关文章

最新更新