You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动