UIButton 背景图像水平缩放以填充同时保持纵横比

Posted

技术标签:

【中文标题】UIButton 背景图像水平缩放以填充同时保持纵横比【英文标题】:UIButton background image horizontal scale to fill while maintaining aspect ratio 【发布时间】:2015-08-20 02:14:43 【问题描述】:

我正在尝试将 UIButton 的 backgroundImage 设置为可以是任意大小的图像。我想要显示高图像的方式是让图像扩展以水平填充按钮,并且只显示图像的顶部。因此,对于尺寸为 100x200 且图像为 80x400 的按钮,我想将图像缩放为 100x500,并且只显示该缩放图像的前 200 个像素。

我想知道是否有某种方法可以改变背景图像填充 uibutton 的方式(现在它不会保留图像的纵横比)。我尝试将按钮的contentMode 和按钮的imageView(注意我将按钮设置为Custom 类型,而不是System)设置为.ScaleAspectFill,但这并没有做任何事情。

我最接近的方法是完全放弃背景图像并改用setImage。此代码能够水平填充按钮,但它显示图像的中间,而不是顶部。它还具有奇怪的功能,如果缩放的图像与按钮的高度相同,则它不会显示完整的图像(从底部和顶部切割了大约 5 px)。这是代码:

imagesButton.imageView?.contentMode = .ScaleAspectFill
imagesButton.contentHorizontalAlignment = .Fill
imagesButton.setImage(image, forState: .Normal)

我查看了大约 5 篇关于 UIButtons 中图像大小调整的堆栈溢出帖子,但我找不到满足我特定需求的正确设置。

【问题讨论】:

【参考方案1】:

我不知道此解决方案是否适合您,但这是实现您想要做的事情的最佳方式,并在定位和缩放图像时为您提供尽可能多的灵活性,它使用一个 UIImageView(甚至可能带有一个包装它的 UIView,以获得更多图像处理选项),其顶部有一个透明的自定义按钮。

这种方法的好处是,您几乎可以对图像及其显示方式做任何您想做的事情。缺点是您失去了一些默认的 UIButton 功能(例如在触摸时自动更改图像)。但您可以根据需要以编程方式实现这些功能。

【讨论】:

以上是关于UIButton 背景图像水平缩放以填充同时保持纵横比的主要内容,如果未能解决你的问题,请参考以下文章

Andengine,缩放图像以填充屏幕大小,而不保持纵横比

缩放图像以填充 ImageView 宽度并保持纵横比

如何缩放 SVG 图像以填充浏览器窗口?

如何在保持图像纵横比的同时调整 UIButton 中的图像大小?

如何在正确保持纵横比的情况下进行缩放

缩放位图保持纵横比