我们可以将按钮的图像设置为方面填充:
imageView?.contentMode = UIViewContentMode.ScaleAspectFill
但由于我正在处理背景图片,因此我不确定如何访问背景图片的contentMode。
我知道不是这样做,我可以创建一个自定义类,其中图像可以居中,按钮文本居中于顶部,然后使用上面的代码将imageview设置为纵横填充,但这似乎更多努力达到同样的效果。
实现这一目标的最佳方式是什么?
答案 0 :(得分:2)
问题问题已经过了很长时间,但有人怀疑,如果你使用setImage()设置你的按钮图像,它会显示图像的宽度和高度,无论你是否缩放,但如果你设置使用setBackgroundImage()它会很好,甚至不需要缩放
答案 1 :(得分:1)
对于偶然发现此问题的人:
包含UIImageView
的{{1}}无法公开访问。参见https://developer.apple.com/documentation/uikit/uibutton,没有这样的属性。我不为什么苹果公司要保护它。
不过,您可以为所有backgroundImage
过滤UIButton
并将其属性设置为UIImageView
:
.scaleAspectFit
第一个解决方案可能与 override func layoutSubviews() {
super.layoutSubviews()
button
.subviews
.filter { $0 is UIImageView }
.forEach { $0.contentMode = .scaleAspectFit }
}
中的其他UIImageView
个冲突。因此,您也可以仅过滤确切的背景图片:
UIButton
我不建议通过其数组索引访问 override func layoutSubviews() {
super.layoutSubviews()
let backgroundImage = UIImage(named: "backspace-button")
let backgroundImageView = button
.subviews
.filter { $0 is UIImageView }
.first(where: { ($0 as? UIImageView)?.image == backgroundImage}) as? UIImageView
backgroundImageView?.contentMode = .scaleAspectFit
}
。不能保证这个顺序会永远如此。