You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IOS/Objective-C:通过Storyboard与代码设置图片的imageRenderingMode

解决Storyboard创建按钮后修改UIImageRenderingMode的问题

我刚好踩过类似的坑,给你梳理下正确写法和问题根源:

错误原因

你提到的uiimagerenderingmodealwaystemplate是拼写+语法错误导致的——在Swift里,UIImage.RenderingMode是枚举类型,正确的枚举值是**.alwaysTemplate**,而且UIImage是不可变对象,不能直接修改它的渲染模式,必须通过方法生成新的图片实例。

Swift 正确代码示例

假设你已经给Storyboard里的按钮关联了IBOutlet(比如叫myCustomButton),代码应该这么写:

// 先安全获取按钮原有的图片,避免强制解包崩溃
if let originalImage = myCustomButton.imageView?.image {
    // 将图片转换为模板渲染模式
    let templateImage = originalImage.withRenderingMode(.alwaysTemplate)
    // 把新图片重新赋值给按钮
    myCustomButton.setImage(templateImage, for: .normal)
    // 现在设置色调就会生效了
    myCustomButton.tintColor = UIColor.systemBlue
}

Objective-C 正确代码示例

如果是用Objective-C开发,写法如下:

// 假设按钮IBOutlet是_myCustomButton
UIImage *originalImage = _myCustomButton.imageView.image;
UIImage *templateImage = [originalImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
[_myCustomButton setImage:templateImage forState:UIControlStateNormal];
_myCustomButton.tintColor = [UIColor systemBlueColor];

额外注意事项

  • 确保你已经正确关联了按钮的IBOutlet,否则代码无法找到按钮实例
  • 如果你的按钮是用setBackgroundImage设置的背景图,上面的方法不适用——背景图的渲染逻辑不同,若要修改背景图色调需要用Core Graphics等方式处理
  • 代码设置的渲染模式会覆盖Storyboard中按钮图片的Render As属性,所以不用额外在Storyboard里调整这个选项

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:48:08