低系统兼容iOS13的系统色

有时候项目的最低系统低于13.0,那么适配暗黑模式,或使用系统颜色时,需要各种类似#available(iOS 13.0, *)这样的判断。
因此需要封装一下系统的api以便能兼容低系统
下面是我封装的相关扩展

extension UIColor {
    
    static let black3 = UIColor(hex: "#333")
    static let black6 = UIColor(hex: "#666")
    static let black9 = UIColor(hex: "#999")
    
    static var random: UIColor {
        let r = arc4random_uniform(256)
        let g = arc4random_uniform(256)
        let b = arc4random_uniform(256)
        return UIColor(red: CGFloat(r) / 255.0, green: CGFloat(g) / 255.0, blue: CGFloat(b) / 255.0, alpha: 1)
    }
    
    convenience init(rgb r: CGFloat, _ g: CGFloat, _ b: CGFloat, _ a: CGFloat = 1) {
        self.init(red: r / 255.0, green: g / 255.0, blue: b / 255.0, alpha: a)
    }
    
    convenience init(gray v: CGFloat) {
        self.init(red: v / 255.0, green: v / 255.0, blue: v / 255.0, alpha: 1)
    }
    
    convenience init(hex string: String, alpha: CGFloat = 1.0) {
        
        var hex = string.hasPrefix("#") ? String(string.dropFirst()) : string
        guard hex.count == 3 || hex.count == 6  else {
            self.init(white: 1.0, alpha: 0.0)
            return
        }
        
        if hex.count == 3 {
            for (indec, char) in hex.enumerated() {
                hex.insert(char, at: hex.index(hex.startIndex, offsetBy: indec * 2))
            }
        }
        
        self.init(
            red: CGFloat((Int(hex, radix: 16)! >> 16) & 0xFF) / 255.0,
            green: CGFloat((Int(hex, radix: 16)! >> 8) & 0xFF) / 255.0,
            blue: CGFloat((Int(hex, radix: 16)!) & 0xFF) / 255.0,
            alpha: alpha
        )
    }
    
    static func gray(_ value: CGFloat) -> UIColor {
        return UIColor(gray: value)
    }
    
    static func dynamicGray(_ v: CGFloat) -> UIColor {
        if #available(iOS 13.0, *) {
            return UIColor { (t) -> UIColor in
                return t.userInterfaceStyle == .dark ? UIColor.gray(255 - v) : UIColor.gray(v)
            }
        }else {
            return UIColor.gray(v)
        }
    }
    
    static func dynamicColor(_ lColor: UIColor, dColor: UIColor) -> UIColor {
        if #available(iOS 13.0, *) {
            return UIColor { (t) -> UIColor in
                return t.userInterfaceStyle == .dark ? dColor : lColor
            }
        }else {
            return lColor
        }
    }
    
    
    ///重写iOS13的一些属性,让其对13以下系统适配
    class var systemIndigo: UIColor {
        let lColor = UIColor(red: 0.34, green: 0.34, blue: 0.84, alpha: 1)
        let dColor = UIColor(red: 0.37, green: 0.36, blue: 0.9, alpha: 1)
        if #available(iOS 13.0, *) {
            return .dynamicColor(lColor, dColor: dColor)
        }else {
            return lColor
        }
    }
    class var systemGray2: UIColor {
        let lColor = UIColor(red: 0.68, green: 0.68, blue: 0.70, alpha: 1)
        let dColor = UIColor(red: 0.39, green: 0.39, blue: 0.40, alpha: 1)
        if #available(iOS 13.0, *) {
            return .dynamicColor(lColor, dColor: dColor)
        }else {
            return lColor
        }
    }
    class var systemGray3: UIColor {
        let lColor = UIColor(red: 0.78, green: 0.78, blue: 0.80, alpha: 1)
        let dColor = UIColor(red: 0.28, green: 0.28, blue: 0.29, alpha: 1)
        if #available(iOS 13.0, *) {
            return .dynamicColor(lColor, dColor: dColor)
        }else {
            return lColor
        }
    }
    class var systemGray4: UIColor {
        let lColor = UIColor(red: 0.82, green: 0.82, blue: 0.84, alpha: 1)
        let dColor = UIColor(red: 0.23, green: 0.23, blue: 0.24, alpha: 1)
        if #available(iOS 13.0, *) {
            return .dynamicColor(lColor, dColor: dColor)
        }else {
            return lColor
        }
    }
    class var systemGray5: UIColor {
        
        let lColor = UIColor(red: 0.9, green: 0.9, blue: 0.92, alpha: 1)
        let dColor = UIColor(red: 0.17, green: 0.17, blue: 0.18, alpha: 1)
        if #available(iOS 13.0, *) {
            return .dynamicColor(lColor, dColor: dColor)
        }else {
            return lColor
        }
    }
    class var systemGray6: UIColor {
        let lColor = UIColor(red: 0.95, green: 0.95, blue: 0.97, alpha: 1)
        let dColor = UIColor(red: 0.11, green: 0.11, blue: 0.12, alpha: 1)
        if #available(iOS 13.0, *) {
            return .dynamicColor(lColor, dColor: dColor)
        }else {
            return lColor
        }
    }
    class var label: UIColor {
        let lColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 1)
        let dColor = UIColor(red: 1, green: 1, blue: 1, alpha: 1)
        if #available(iOS 13.0, *) {
            return .dynamicColor(lColor, dColor: dColor)
        }else {
            return lColor
        }
    }
    class var secondaryLabel: UIColor {
        let lColor = UIColor(red: 0.24, green: 0.24, blue: 0.26, alpha: 0.6)
        let dColor = UIColor(red: 0.92, green: 0.92, blue: 0.96, alpha: 0.6)
        if #available(iOS 13.0, *) {
            return .dynamicColor(lColor, dColor: dColor)
        }else {
            return lColor
        }
    }
    class var tertiaryLabel: UIColor {
        let lColor = UIColor(red: 0.24, green: 0.24, blue: 0.26, alpha: 0.3)
        let dColor = UIColor(red: 0.92, green: 0.92, blue: 0.96, alpha: 0.3)
        if #available(iOS 13.0, *) {
            return .dynamicColor(lColor, dColor: dColor)
        }else {
            return lColor
        }
    }
    class var quaternaryLabel: UIColor {
        let lColor = UIColor(red: 0.24, green: 0.24, blue: 0.26, alpha: 0.18)
        let dColor = UIColor(red: 0.92, green: 0.92, blue: 0.96, alpha: 0.18)
        if #available(iOS 13.0, *) {
            return .dynamicColor(lColor, dColor: dColor)
        }else {
            return lColor
        }
    }
    class var link: UIColor {
        let lColor = UIColor(red: 0.0, green: 0.48, blue: 1, alpha: 1)
        let dColor = UIColor(red: 0.04, green: 0.52, blue: 1, alpha: 1)
        if #available(iOS 13.0, *) {
            return .dynamicColor(lColor, dColor: dColor)
        }else {
            return lColor
        }
    }
    class var placeholderText: UIColor {
        let lColor = UIColor(red: 0.24, green: 0.24, blue: 0.26, alpha: 0.3)
        let dColor = UIColor(red: 0.92, green: 0.92, blue: 0.96, alpha: 0.3)
        if #available(iOS 13.0, *) {
            return .dynamicColor(lColor, dColor: dColor)
        }else {
            return lColor
        }
    }
    class var separator: UIColor {
        let lColor = UIColor(red: 0.24, green: 0.24, blue: 0.26, alpha: 0.29)
        let dColor = UIColor(red: 0.33, green: 0.33, blue: 0.35, alpha: 0.6)
        if #available(iOS 13.0, *) {
            return .dynamicColor(lColor, dColor: dColor)
        }else {
            return lColor
        }
    }
    class var opaqueSeparator: UIColor {
        let lColor = UIColor(red: 0.78, green: 0.78, blue: 0.78, alpha: 1)
        let dColor = UIColor(red: 0.22, green: 0.22, blue: 0.23, alpha: 1)
        if #available(iOS 13.0, *) {
            return .dynamicColor(lColor, dColor: dColor)
        }else {
            return lColor
        }
    }
    
    class var systemBackground: UIColor {
        let lColor = UIColor(red: 1, green: 1, blue: 1, alpha: 1)
        let dColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 1)
        if #available(iOS 13.0, *) {
            return .dynamicColor(lColor, dColor: dColor)
        }else {
            return lColor
        }
    }
    class var secondarySystemBackground: UIColor {
        let lColor = UIColor(red: 0.95, green: 0.95, blue: 0.97, alpha: 1)
        let dColor = UIColor(red: 0.11, green: 0.11, blue: 0.12, alpha: 1)
        if #available(iOS 13.0, *) {
            return .dynamicColor(lColor, dColor: dColor)
        }else {
            return lColor
        }
    }
    class var tertiarySystemBackground: UIColor {
        let lColor = UIColor(red: 1, green: 1, blue: 1, alpha: 1)
        let dColor = UIColor(red: 0.17, green: 0.17, blue: 0.18, alpha: 1)
        if #available(iOS 13.0, *) {
            return .dynamicColor(lColor, dColor: dColor)
        }else {
            return lColor
              }
    }
    class var systemGroupedBackground: UIColor {
        let lColor = UIColor(red: 0.95, green: 0.95, blue: 0.97, alpha: 1)
        let dColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 1)
        if #available(iOS 13.0, *) {
            return .dynamicColor(lColor, dColor: dColor)
        }else {
            return lColor
        }
    }
    class var secondarySystemGroupedBackground: UIColor {
        let lColor = UIColor(red: 1, green: 1, blue: 1, alpha: 1)
        let dColor = UIColor(red: 0.11, green: 0.11, blue: 0.12, alpha: 1)
        if #available(iOS 13.0, *) {
            return .dynamicColor(lColor, dColor: dColor)
        }else {
            return lColor
        }
    }
    class var tertiarySystemGroupedBackground: UIColor {
        let lColor = UIColor(red: 0.95, green: 0.95, blue: 0.97, alpha: 1)
        let dColor = UIColor(red: 0.17, green: 0.17, blue: 0.18, alpha: 1)
        if #available(iOS 13.0, *) {
            return .dynamicColor(lColor, dColor: dColor)
        }else {
            return lColor
        }
    }
    class var systemFill: UIColor {
        let lColor = UIColor(red: 0.47, green: 0.47, blue: 0.5, alpha: 0.2)
        let dColor = UIColor(red: 0.47, green: 0.47, blue: 0.5, alpha: 0.36)
        if #available(iOS 13.0, *) {
            return .dynamicColor(lColor, dColor: dColor)
        }else {
            return lColor
        }
    }
    class var secondarySystemFill: UIColor {
        let lColor = UIColor(red: 0.47, green: 0.47, blue: 0.5, alpha: 0.16)
        let dColor = UIColor(red: 0.47, green: 0.47, blue: 0.5, alpha: 0.32)
        if #available(iOS 13.0, *) {
            return .dynamicColor(lColor, dColor: dColor)
        }else {
            return lColor
        }
    }
    class var tertiarySystemFill: UIColor {
        let lColor = UIColor(red: 0.46, green: 0.46, blue: 0.5, alpha: 0.12)
        let dColor = UIColor(red: 0.46, green: 0.46, blue: 0.5, alpha: 0.24)
        if #available(iOS 13.0, *) {
            return .dynamicColor(lColor, dColor: dColor)
        }else {
            return lColor
        }
    }
    class var quaternarySystemFill: UIColor {
        let lColor = UIColor(red: 0.45, green: 0.45, blue: 0.5, alpha: 0.08)
        let dColor = UIColor(red: 0.46, green: 0.46, blue: 0.5, alpha: 0.18)
        if #available(iOS 13.0, *) {
            return .dynamicColor(lColor, dColor: dColor)
        }else {
            return lColor
        }
    }
    
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值