Когда я использую именованный цвет внутри расширения UIViewController (как показано ниже), fillColor всегда получает значение цвета, соответствующее системной теме (например: Dark), а не переопределенное (например: Light).
extension UIViewController {
func dropRoundedShadow(shadowColor: UIColor, opacity: Float = 0.5, offSet: CGSize, radius: CGFloat = 5, scale: Bool = true) {
let shadowLayerName = "Shadow"
let shadowLayer = CAShapeLayer()
shadowLayer.name = shadowLayerName
shadowLayer.path = UIBezierPath(roundedRect: bounds, cornerRadius: radius).cgPath
// This line doesn't get the appropriate color value
shadowLayer.fillColor = UIColor(named: "app_background")!.cgColor
shadowLayer.shadowColor = shadowColor.cgColor
shadowLayer.shadowPath = shadowLayer.path
shadowLayer.shadowOffset = offSet
shadowLayer.shadowOpacity = opacity
shadowLayer.shadowRadius = radius
if let oldShadowLayer = layer.sublayers?[0],
oldShadowLayer is CAShapeLayer,
oldShadowLayer.name == shadowLayerName {
layer.sublayers?.remove(at: 0)
}
layer.insertSublayer(shadowLayer, at: 0)
}
}
Несмотря на то, что он работает нормально, когда я проверяю его вручную и назначаю значение цвета, как показано ниже,
if #available(iOS 12.0, *) {
if self.traitCollection.userInterfaceStyle == .dark {
shadowLayer.fillColor = UIColor.black.cgColor
} else {
shadowLayer.fillColor = UIColor.white.cgColor
}
}