UIView的阴影路径颜色不变

时间:2019-09-25 06:56:54

标签: ios swift uiview ios-darkmode shadowpath

我有一个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

enter image description here

现在我的问题是

  

当我更改手机的外观时,shadowsPath color不会自动更改。我该怎么做才能使颜色动态?

3 个答案:

答案 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
   }
}