既然adjustsImageWhenHighlighted在iOS 15.0中被否决了,那么用UIButtonConfiguration设置它的方法是什么呢?如果我直接设置它,我会收到一条消息:“您可以定制,以便通过configurationUpdateHandler复制此行为”,但是我应该做什么来在configurationUpdateHandler中设置它呢?谢谢
发布于 2022-10-05 13:34:07
这是最基本的。
假设您有“正常”和“突出显示”图像:
// let's use new UIButton.Configuration
newButton.configuration = .plain()
newButton.configurationUpdateHandler = { button in
var config = button.configuration
config?.image = button.isHighlighted ? imgHighlighted : imgNormal
button.configuration = config
}
下面是一个可运行的示例,它使用UIGraphicsImageRenderer
创建按钮图像的“黑暗”版本“动态”:
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
guard let imgNormal = UIImage(named: "myButtonImage")
else {
print("Could not load images!")
return
}
// generate a "darkened" version of the image
let rndr = UIGraphicsImageRenderer(size: imgNormal.size)
let imgHighlighted = rndr.image { (ctx) in
imgNormal.draw(at: .zero)
UIColor.black.withAlphaComponent(0.5).setFill()
ctx.cgContext.fill(CGRect(origin: .zero, size: imgNormal.size))
}
let oldButton = UIButton()
let newButton = UIButton()
// "standard" button
oldButton.setImage(imgNormal, for: [])
// default is .adjustsImageWhenHighlighted = true
// let's use new UIButton.Configuration
newButton.configuration = .plain()
newButton.configurationUpdateHandler = { button in
var config = button.configuration
config?.image = button.isHighlighted ? imgHighlighted : imgNormal
button.configuration = config
}
[oldButton, newButton].forEach { b in
b.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(b)
}
let g = view.safeAreaLayoutGuide
NSLayoutConstraint.activate([
oldButton.topAnchor.constraint(equalTo: g.topAnchor, constant: 20.0),
oldButton.widthAnchor.constraint(equalToConstant: 80.0),
oldButton.heightAnchor.constraint(equalTo: oldButton.widthAnchor),
oldButton.centerXAnchor.constraint(equalTo: g.centerXAnchor),
newButton.topAnchor.constraint(equalTo: oldButton.bottomAnchor, constant: 20.0),
newButton.widthAnchor.constraint(equalTo: oldButton.widthAnchor),
newButton.heightAnchor.constraint(equalTo: oldButton.widthAnchor),
newButton.centerXAnchor.constraint(equalTo: g.centerXAnchor),
])
}
}
当您运行这个按钮时,这两个按钮的外观和功能应该相同。
https://stackoverflow.com/questions/73953128
复制相似问题