UIButton的backgroundImage的内容模式不受尊重

时间:2016-10-25 17:43:14

标签: ios swift uibutton

我正在对我即将发布的应用进行最后润色,而且我很难让contentMode的{​​{1}}背景图片得到尊重。无论我指定的UIButton如何,图片都会在后台播放,而不考虑contentMode设置。

我看过一个涵盖这个主题的post,但在我的情况下似乎没有做任何事情。

这是从contentMode

调用的
viewDidLoad

我不确定我错过了什么,但我放心,这对我来说将是一件令人吃惊的事。我欢迎有关如何让// I tried putting the contentMode lines here... myButton.imageView!.contentMode = .scaleAspectFit myButton.contentMode = .scaleAspectFit myButton.setBackgroundImage(UIImage(named: "myImage.png"), for: .normal) // ...and here // myButton.imageView!.contentMode = .scaleAspectFit // myButton.contentMode = .scaleAspectFit // I threw this in for S's & G's to see if it would work...it didn't myButton.translatesAutoresizingMaskIntoConstraints = false myButton.imageView?.translatesAutoresizingMaskIntoConstraints = true 的{​​{1}}背景图像得到尊重的建议。谢谢你的阅读。

更新

按钮被输入为自定义按钮,而不是系统按钮。

3 个答案:

答案 0 :(得分:12)

问题是您使用setBackgroundImage()方法添加图像。这会将您的图片添加到您无法直接到达UIImageView的私人myButton.imageView!。在您的代码中,您为您的按钮而不是其背景图片应用了contentType

如果您想要达到此背景UIImageView,则需要使用subviews数组。但是,如果您尝试在viewDidLoad()方法中执行此操作,则会发现后台UIImageView尚未添加,因为您的按钮layout方法不是'叫。因此,您可以明确调用layoutIfNeeded()或以contentMode方式移动viewDidAppear()设置。

希望它对你有所帮助。

override func viewDidLoad() {
    myButton.setBackgroundImage(UIImage(named: "myImage"), for: .normal)
    myButton.setTitle("Some title", for: .normal)
}

override func viewDidAppear(_ animated: Bool) {
    myButton.subviews.first?.contentMode = .scaleAspectFit
}

答案 1 :(得分:5)

为了简化已接受的答案,您只需布置子视图,您的设置代码就可以在一个地方完成。

override func viewDidLoad() {
    super.viewDidLoad()

    myButton.setBackgroundImage(UIImage(named: "myImage.png"), for: .normal)
    myButton.layoutIfNeeded()
    myButton.subviews.first?.contentMode = .scaleAspectFill
}

答案 2 :(得分:0)

按钮的imageView属性和backgroundImage属性是两个独立的东西。

与接受的答案不同,您可以改用imageView属性。

override func viewDidLoad() {
   super.viewDidLoad()

   myButton.setImage(UIImage(named: "myImage.png"), for: .normal)
   myButton.imageView?.contentMode = .scaleAspectFill
}