保持 UIbuttons 背景图像的纵横比

Posted

技术标签:

【中文标题】保持 UIbuttons 背景图像的纵横比【英文标题】:Keep aspect ratio for UIbuttons background image 【发布时间】:2016-11-10 14:14:24 【问题描述】:

我一直在寻找几个小时,但我发现的只是旧答案,说它无法完成。

我有一个按钮,我希望背景图像尽可能大,同时保持其纵横比。无论我做什么,背景图像都会被拉长。我试过了。

    var bluecircle = #imageLiteral(resourceName: "BLUE.png")

    monBreak.contentMode = UIViewContentMode.scaleAspectFit
    monBreak.setBackgroundImage(bluecircle, for: UIControlState.normal)

我真的需要制作一个图像视图并在其上放置一个不可见的按钮吗?这似乎欢迎很多可能出错的新事物。

我试过了

@IBOutlet weak var monBreak: UIButton!

override func viewDidLoad() 
    super.viewDidLoad()

    var bluecircle = #imageLiteral(resourceName: "BLUE.png")

    let theimagebehindmonBreak = UIImageView(image: bluecircle)
    theimagebehindmonBreak.frame = CGRectFromString( "0,0,40,40")
    monBreak.contentMode = UIViewContentMode.scaleAspectFit
    monBreak.addSubview(theimagebehindmonBreak)
    theimagebehindmonBreak.image=bluecircle
    theimagebehindmonBreak.contentMode = UIViewContentMode.scaleAspectFit

这得到了正确的纵横比,但由于我希望布局是动态的,因此将其大小设置为固定值是行不通的,而且它没有居中。

起初我厌倦了像这样简单地应用按钮的约束

    var dacontraints = NSLayoutConstraint(monBreak.constraints)

但此时我收到错误“无法使用类型为 '[NSLayoutconstraints]' 的参数列表调用类型为 'NSLayoutConstraint' 的初始化程序”

这让我很生气

【问题讨论】:

【参考方案1】:

听起来像是适合子类化的解决方案。

子类 UIButton,在 init 中添加一个 ImageView,将其调整为 frame,并正确设置 contentMode。

【讨论】:

【参考方案2】:

老问题,但由于我正在寻找相同的问题,我认为这仍然有效。

我试图为backgroundImage 做同样的事情(正如大家所说),这是不可能的。但是,如果您的按钮仅包含一个图标,那么首先您应该使用setImage 方法,如果您正在使用它,您将可以访问按钮的imageView 属性。由于这是一个 UIImageView,您可以将 contentMode 设置为您喜欢的任何值。

【讨论】:

以上是关于保持 UIbuttons 背景图像的纵横比的主要内容,如果未能解决你的问题,请参考以下文章

Yii2 - Imagine - 创建缩略图并保持透明背景

如何在此应用程序中保持图像视图的纵横比? 【Android、ImageView、长宽比、ScrollView】

UIViewContentModeScaleAspectFill 不保持图像的纵横比

如何保持并排图像的纵横比,保持图像高度相同并在图像之间固定填充?

css 保持图像的纵横比

c# 在保持纵横比的同时将图像调整为不同的大小