gpt4 book ai didi

ios - 不尊重 UIButton 的 backgroundImage 的内容模式

转载 作者:可可西里 更新时间:2023-10-31 23:51:59 24 4
gpt4 key购买 nike

我正在对即将发布的应用程序进行最后的润色,但我遇到了将 UIButton 的背景图像的 contentMode 设置为受到尊重。无论我指定的 contentMode 是什么,图像都会在背景中弹出,而不考虑 contentMode 设置。

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

这是从 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

我不确定我错过了什么,但我确信这对我来说会是非常愚蠢的事情。我欢迎就如何使 UIButton 的背景图像的 contentMode 得到尊重提出建议。感谢您的阅读。

更新

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

最佳答案

问题是您使用 setBackgroundImage() 方法添加图像。这会将您的图像添加到一些您无法像 myButton.imageView! 那样直接访问的私有(private) UIImageView。在您的代码中,您正在为您的按钮应用 contentType 而不是它的背景图片。

如果你想达到这个背景 UIImageView 你需要使用 subviews 数组。但是,如果您尝试在 viewDidLoad() 方法中执行此操作,您会发现背景 UIImageView 尚未添加,因为您的按钮 layout 方法没有被调用。有两种方法可以解决这个问题。

解决方案 1 – 显式调用 layoutIfNeeded:

override func viewDidLoad() {
super.viewDidLoad()

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

解决方案 2 – 在 viewDidAppear 方法中移动 contentMode 设置。

override func viewDidLoad() {
super.viewDidLoad()

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

override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)

myButton.subviews.first?.contentMode = .scaleAspectFit
}

希望对你有帮助。

关于ios - 不尊重 UIButton 的 backgroundImage 的内容模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40246367/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com