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
相关产品推荐
相关产品推荐

