UIBarButtonItem文本颜色异常:设置绿色却显示白色的问题排查
问题根源&快速修复方案
嘿,这个问题我之前也踩过坑!你的按钮文本显示白色,核心原因是UIColor初始化时的RGB参数用错范围了!
你用的UIColor(red:green:blue:alpha:)这个初始化方法,要求传入的红、绿、蓝参数是0.0到1.0之间的浮点数(代表颜色通道的占比,0是完全没有,1是最大值)。但你直接传了0-255的绝对值(比如126.0、189.0),这些数值远大于1.0,系统会自动把它们截断成1.0。
这么一来,你写的代码实际生成的颜色是:
UIColor(red: 1.0, green: 1.0, blue: 0.043, alpha: 1.0)
这是个偏亮的黄绿色,再加上导航栏可能开启了深色模式或者系统的自适应对比度,就变成白色了。
两种正确的写法:
方法1:手动把RGB值转成0-1的比例
把你原来的255进制数值除以255.0就行:
let button = UIBarButtonItem(title: "Button", style: .plain, target: self, action: #selector(exit)) button.tintColor = UIColor(red: 126.0/255.0, green: 189.0/255.0, blue: 11.0/255.0, alpha: 1.0)
方法2:用iOS 14+的便捷初始化(更省心)
苹果在iOS14之后新增了直接支持0-255整数的UIColor初始化方法,不用自己算除法:
let button = UIBarButtonItem(title: "Button", style: .plain, target: self, action: #selector(exit)) button.tintColor = UIColor(red: 126, green: 189, blue: 11, alpha: 1.0)
如果改完还是显示白色,可以检查这两点:
- 你的导航栏是不是用了
.black的barStyle,或者开启了深色模式,系统自动调整了tintColor的对比度 - 有没有其他全局设置(比如导航栏的
tintColor)覆盖了这个按钮的颜色
内容的提问来源于stack exchange,提问作者Trombone0904




