在UIButton的ImageView上将ContentMode设置为AspectFill不适用于较小的图像

时间:2014-12-02 10:24:46

标签: ios uibutton

我有一个UIButton从网络下载图像,我希望内容模式为#34;方面填充",所以我这样做了:

btn.imageView.contentMode = UIViewContentModeScaleAspectFill;

然后我打电话:

[btn setImage:image forState:UIControlStateNormal];

这适用于比按钮大的图像。缩放它们以适应宽高比不变的按钮。但对于那些小于按钮的图像,它们只是在中心显示而不会被拉伸。

要解决此问题,我尝试使用我检索到的图片制作可调整大小的图片,然后在我的按钮上调用setImage:forState:,但这不起作用。

因此,我最终必须为每个小于我的按钮的图像手动绘制一个已调整大小的图像,然后使用我的按钮绘制的图像,但我不喜欢这个解决方案。

所以我的问题是如何在我的按钮上正确缩放较小的图像而不必每次都手动绘制一个调整大小的图像?

2 个答案:

答案 0 :(得分:27)

我遇到过同样的问题。试试这个:

    [btn setContentHorizontalAlignment:UIControlContentHorizontalAlignmentFill];
    [btn setContentVerticalAlignment:UIControlContentVerticalAlignmentFill];

根据我的理解,在设置图像时,按钮的UIImageView的大小/帧设置为图像的大小/帧,因此当它较小时,它不受UIButton&的约束。 #39; s框架,因此在按钮中间幸福地保持不变。

要解决此问题,我们需要强制UIImageView占用UIButton的完整大小,并设置其对齐方式来处理这个问题。

有关详细信息,请参阅参考资料(尽管它将此称为AutoLayout问题): https://stackoverflow.com/a/28205566/3692828

答案 1 :(得分:0)

试试这个:
1.继承自UIButton
2.覆盖layoutSubviews方法,如下所示:

- (void)layoutSubviews {
    [super layoutSubviews];
    self.imageView.frame = self.bounds;
}