iOS 15中UIButton的图片显示行为是否发生了变更?
这确实是iOS 15的系统变更导致的。
iOS 15推出了UIButton.Configuration样式体系,所有新建的UIButton默认会使用基于配置的新式布局逻辑,覆盖了旧版API的默认行为,你遇到的两个不符合预期的表现都来自这个变更:
- 默认不会自动将按钮图片识别为template模式渲染,只会遵循图片本身的渲染属性展示原图
- 旧版
setImage(_:for:)的图片缩放适配逻辑失效,相关参数被整合到configuration配置项中
方案1:回退到iOS 14及之前的旧版按钮行为
如果不需要用到iOS 15新增的按钮样式能力,只需要加一行代码即可完全恢复旧逻辑,原有其余代码不用修改:
button.configuration = nil
如果是在Interface Builder中创建的按钮,直接在属性检查器中将按钮的Style从默认的Plain改为Default即可生效。
方案2:适配新的Configuration体系
如果要使用iOS 15的新按钮能力,按照新API规范调整代码即可:
var config = button.configuration // 指定图片渲染模式为模板,才能继承tint color着色 let jack = UIImage(named:"jack.png")?.withRenderingMode(.alwaysTemplate) config?.image = jack // 根据需要调整图片内边距、内容边距,控制图片缩放适配 config?.imagePadding = 0 config?.contentInsets = .zero // 将配置赋值回按钮 button.configuration = config // 此时设置tint color即可生效 button.tintColor = .systemBlue
内容的提问来源于stack exchange,提问作者matt
相关产品推荐
相关产品推荐

