Search code examples
swiftuinavigationbaruicolor

how to set hex color value to navigation bar


I am getting color value in response from webservice team like

"company_color_ses" = 373737;

How do I set this color to my navigation bar. Do I seprate string with 2 digits and set this color in R G B pattern. like R = 37 G = 37 B = 37. Or do anyone has any other solution?

Thanks


Solution

  • Use this extension of UIColor for hexcolor.

        extension UIColor {
    
            convenience init(hexString: String) {
    
                let hex = hexString.trimmingCharacters(in: CharacterSet.alphanumerics.inverted)
                var int = UInt32()
                Scanner(string: hex).scanHexInt32(&int)
                let a, r, g, b: UInt32
                switch hex.count {
                case 3: // RGB (12-bit)
                    (a, r, g, b) = (255, (int >> 8) * 17, (int >> 4 & 0xF) * 17, (int & 0xF) * 17)
                case 6: // RGB (24-bit)
                    (a, r, g, b) = (255, int >> 16, int >> 8 & 0xFF, int & 0xFF)
                case 8: // ARGB (32-bit)
                    (a, r, g, b) = (int >> 24, int >> 16 & 0xFF, int >> 8 & 0xFF, int & 0xFF)
                default:
                    (a, r, g, b) = (0, 0, 0, 0)
                }
                self.init(red: CGFloat(r) / 255, green: CGFloat(g) / 255, blue: CGFloat(b) / 255, alpha: CGFloat(a) / 255)
            }
    
            var toHex: String? {
                return toHex()
            }
    
            // MARK: - From UIColor to String
            func toHex(alpha: Bool = false) -> String? {
                guard let components = cgColor.components, components.count >= 3 else {
                    return nil
                }
    
                let r = Float(components[0])
                let g = Float(components[1])
                let b = Float(components[2])
                var a = Float(1.0)
    
                if components.count >= 4 {
                    a = Float(components[3])
                }
    
                if alpha {
                    return String(format: "%02lX%02lX%02lX%02lX", lroundf(r * 255), lroundf(g * 255), lroundf(b * 255), lroundf(a * 255))
                } else {
                    return String(format: "%02lX%02lX%02lX", lroundf(r * 255), lroundf(g * 255), lroundf(b * 255))
                }
            }
    }
    

    use it like below:

    navigationController?.navigationBar.backgroundColor = UIColor(hexString: 373737)