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

Posted

技术标签:

【中文标题】在 UIButton 的 ImageView 上将 ContentMode 设置为 AspectFill 不适用于较小的图像【英文标题】:Setting ContentMode to AspectFill on ImageView of UIButton not work with smaller images 【发布时间】:2014-12-02 10:24:45 【问题描述】:

我有一个UIButton,它从网络下载它的图像,我希望内容模式为“方面填充”,所以我这样做了:

btn.imageView.contentMode = UIViewContentModeScaleAspectFill;

然后我简单地调用:

[btn setImage:image forState:UIControlStateNormal];

这适用于大于按钮的图像。它们被缩放以适合在纵横比不变的按钮中。但是对于比按钮小的图片,它们只是简单地显示在中心而不被拉伸。

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

所以我最终不得不为每个小于我的按钮的图像手动绘制一个调整大小的图像,然后将绘制的图像用于我的按钮,但我不喜欢这种解决方案。

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

【问题讨论】:

我编辑了答案,请检查... 【参考方案1】:

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

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

据我了解,在设置图片时,按钮的 UIImageView 的大小/框架设置为图片的大小/框架,所以当它更小时,它不受 UIButton 框架的约束,因此可以愉快地坐着,不变,在按钮的中间。

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

查看更多信息(尽管它将此称为 AutoLayout 问题): https://***.com/a/28205566/3692828

【讨论】:

对我没用。在 Ipad ios 10 中,我试图在 UIbutton 上设置图像。按钮大小为 150x150,图像比这大。当我尝试在其上设置图像时,它占据了该图像的左上角 @DarshanMothreja 这个问题专门针对小于 UIButton 的图像;您在询问图像何时大于 UIButton。欢迎您提出一个新问题,我可以看看是否可以帮助您解决您的具体情况。为了做出最佳判断,我必须查看您用于设置 UIButton 图像的一些代码。【参考方案2】:

试试这个: 1.继承自UIButton 2.覆盖layoutSubviews方法,像这样:

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

【讨论】:

以上是关于在 UIButton 的 ImageView 上将 ContentMode 设置为 AspectFill 不适用于较小的图像的主要内容,如果未能解决你的问题,请参考以下文章

UIButton 子类中的 imageview.transform 奇怪的行为

如何在不使用 imageview 的情况下直接在视图上将图像设置为背景?

UIButton 在焦点上将图像更改回原始图像(tvOS)

UIButton的imageView在调整大小时变得不隐藏

如何缩放 UIButton 的 imageView?

根据状态更改 UIButton 中 ImageView 的 tint 颜色