分配"方面填充" uibutton Swift背景图片的选项

时间:2016-03-14 22:22:39

标签: swift uibutton

我们可以将按钮的图像设置为方面填充:

imageView?.contentMode = UIViewContentMode.ScaleAspectFill

但由于我正在处理背景图片,因此我不确定如何访问背景图片的contentMode。

我知道不是这样做,我可以创建一个自定义类,其中图像可以居中,按钮文本居中于顶部,然后使用上面的代码将imageview设置为纵横填充,但这似乎更多努力达到同样的效果。

实现这一目标的最佳方式是什么?

2 个答案:

答案 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 } 。不能保证这个顺序会永远如此。