我正在对我即将发布的应用进行最后润色,而且我很难让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}}背景图像得到尊重的建议。谢谢你的阅读。
更新
按钮被输入为自定义按钮,而不是系统按钮。
答案 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
}