我有一个UIView
,并为此设置了一个shadowPath
:
func addShadow() {
let cornerRadius: CGFloat = self.containerView.frame.height/2
self.containerView.layer.shadowPath = UIBezierPath(roundedRect: self.containerView.frame, cornerRadius: cornerRadius).cgPath
self.containerView.layer.shadowRadius = cornerRadius
self.containerView.layer.shadowOffset = .zero
self.containerView.layer.shadowOpacity = 0.2
self.containerView.layer.cornerRadius = cornerRadius
self.containerView.layer.shadowColor = UIColor(named: "whiteColor")?.cgColor
}
这是whiteColor
:
现在我的问题是
当我更改手机的外观时,
shadowsPath color
不会自动更改。我该怎么做才能使颜色动态?
答案 0 :(得分:5)
所有图层属性不会自动响应颜色变化(由于转换为CGColor
)。
相反,当颜色外观更改时,对特征集更改做出反应并重新设置属性:
override open func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
if #available(iOS 13, *), self.traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) {
// re-set your properties here
}
}
答案 1 :(得分:0)
添加
self.view.layoutIfNeeded()
可以解决您的问题您可以通过其他方式在viewDidLayoutSubviews
中添加颜色。
答案 2 :(得分:0)
这对我有用-是Frank Schlegel的答案和Kurt Revis的answer to the cgColor question的答案
的混合体override open func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
if #available(iOS 13, *), self.traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) {
SubmissionOptionsMenu.layer.shadowColor =
UIColor.label.resolvedColor(with: self.traitCollection).cgColor
}
}