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

求助:修改UIButton.disabled状态下的图片颜色,按钮始终呈灰色

解决UIButton禁用状态下图片颜色不生效的问题

你已经走对了方向——用alwaysTemplate模式让图片继承tint颜色,但按钮还是显示灰色,大概率是系统默认的禁用状态 tint 覆盖了你的自定义设置,或者设置方式不对。这里给你几个针对性的修复方案:

1. 针对禁用状态单独设置tintColor

直接设置按钮的全局tintColor会被系统在禁用状态下自动替换成灰色,你需要明确指定禁用状态的tint值:

sendCodeBtn.isEnabled = false
// 给禁用状态的图片开启模板模式
sendCodeBtn.setImage(#imageLiteral(resourceName: "validated_phone").withRenderingMode(.alwaysTemplate), for: .disabled)
// 单独为禁用状态设置自定义tint颜色
sendCodeBtn.setTintColor(Theme.defaultColor(), for: .disabled)

这个方法会覆盖系统默认的禁用态灰色,强制使用你指定的颜色。

2. 排查图片的模板兼容性

确保你的validated_phone图片是适合作为模板使用的:比如是单色的(比如白色或透明底的黑色图标),如果图片本身带有多色或复杂背景,alwaysTemplate模式可能无法正确渲染出你想要的tint效果。建议用矢量图或者纯单色的PNG图。

3. 检查是否有其他样式冲突

如果你的按钮用了iOS 15+的UIButton.Configuration,或者是自定义子类,可能有其他配置优先级更高:

  • 用Configuration的话,需要设置禁用状态的前景色:
var config = sendCodeBtn.configuration ?? .plain()
config.disabledForegroundColor = Theme.defaultColor()
sendCodeBtn.configuration = config

另外也检查一下Storyboard/XIB里的按钮设置,是否有勾选了“Disable Tint”之类的选项,或者设置了固定的禁用态图片。

4. 确认按钮状态是否正确

你提到“按钮也会处于启用状态,但目前按钮始终显示为灰色”,可以在设置完isEnabled后打印一下sendCodeBtn.isEnabled,看看按钮实际是否真的处于启用状态——会不会有其他代码逻辑意外把它设回了禁用?

试试上面的方案,应该能解决你的问题!

内容的提问来源于stack exchange,提问作者Mohamed Lee

火山引擎 最新活动