得知为 UIStackView 设置背景颜色的能力仅从 iOS14 开始,我感到很震惊。在旧版本中,这种尝试只是被忽略了。
我也必须支持旧版本,所以我写了这段代码来解决这个问题:
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
}
}
}
}
代码工作得很好。
但是有一个奇怪的时刻:在 iOS14didSet
中根本不会触发(就像我们甚至可以不检查#availability)。这适合我,这种行为不会引起任何问题。但我不明白为什么它会这样?