swift5.3 UIColor使用十六进制颜色的方法实例
#代码知识 发布时间: 2026-01-12
本文环境

- Xcode 12
- Swift 5.3
- iOS 13
UI 给出的颜色往往都是十六进制的,如 #1a1a1a 等,但是我们在 iOS中是不能直接使用的,查询了一些代码,发现比较老旧,这里给出一个改进版本
使用 Extension 扩展
新建一个 swift 文件
比如我的 string.swift ,复制以下代码
//
// String.swift
// bestWhiteNoise
//
// Created by 袁超 on 2025/10/10.
//
import Foundation
import UIKit
extension String {
/// 十六进制字符串颜色转为UIColor
/// - Parameter alpha: 透明度
func uicolor(alpha: CGFloat = 1.0) -> UIColor {
// 存储转换后的数值
var red: UInt64 = 0, green: UInt64 = 0, blue: UInt64 = 0
var hex = self
// 如果传入的十六进制颜色有前缀,去掉前缀
if hex.hasPrefix("0x") || hex.hasPrefix("0X") {
hex = String(hex[hex.index(hex.startIndex, offsetBy: 2)...])
} else if hex.hasPrefix("#") {
hex = String(hex[hex.index(hex.startIndex, offsetBy: 1)...])
}
// 如果传入的字符数量不足6位按照后边都为0处理,当然你也可以进行其它操作
if hex.count < 6 {
for _ in 0..<6-hex.count {
hex += "0"
}
}
// 分别进行转换
// 红
Scanner(string: String(hex[..<hex.index(hex.startIndex, offsetBy: 2)])).scanHexInt64(&red)
// 绿
Scanner(string: String(hex[hex.index(hex.startIndex, offsetBy: 2)..<hex.index(hex.startIndex, offsetBy: 4)])).scanHexInt64(&green)
// 蓝
Scanner(string: String(hex[hex.index(startIndex, offsetBy: 4)...])).scanHexInt64(&blue)
return UIColor(red: CGFloat(red)/255.0, green: CGFloat(green)/255.0, blue: CGFloat(blue)/255.0, alpha: alpha)
}
}
使用
比如 UI 给的颜色是 #5188e1, 那么我们直接使用字符的扩展函数即可
"5188e1".uicolor()
如设置 TabBarItem 的字体颜色
item.setTitleTextAttributes([NSAttributedString.Key.foregroundColor: "5188e1".uicolor()], for: .selected)
uicolor 函数也是在网上找到的,之前的函数在 iOS 13 中,scanHexInt34 方法被废弃,故此方法适配了 iOS 13
总结
代码知识SEO上一篇 : 如何将anaconda安装配置的mmdetection环境离线拷贝到另一台电脑
下一篇 : Spring boot如何基于拦截器实现访问权限限制
-
SEO外包最佳选择国内专业的白帽SEO机构,熟知搜索算法,各行业企业站优化策略!
SEO公司
-
可定制SEO优化套餐基于整站优化与品牌搜索展现,定制个性化营销推广方案!
SEO套餐
-
SEO入门教程多年积累SEO实战案例,从新手到专家,从入门到精通,海量的SEO学习资料!
SEO教程
-
SEO项目资源高质量SEO项目资源,稀缺性外链,优质文案代写,老域名提权,云主机相关配置折扣!
SEO资源
-
SEO快速建站快速搭建符合搜索引擎友好的企业网站,协助备案,域名选择,服务器配置等相关服务!
SEO建站
-
快速搜索引擎优化建议没有任何SEO机构,可以承诺搜索引擎排名的具体位置,如果有,那么请您多注意!专业的SEO机构,一般情况下只能确保目标关键词进入到首页或者前几页,如果您有相关问题,欢迎咨询!