最近,我开始遇到一个问题,在一个针对较低iOS版本的项目中,从iOS 15开始有UIButton.Configuration
个API可用.我使用界面生成器添加了一个UIButton
,为了清楚地显示这个问题,我给它加上了"这是来自界面生成器的按钮标题集"的标题.在我的视图控制器中,我有以下更新按钮标题的代码:
class ViewController: UIViewController {
@IBOutlet private var button: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
if #available(iOS 15, *) {
var configuration = UIButton.Configuration.borderless()
configuration.title = "This is button title set programmatically"
button.configuration = configuration
} else {
button.setTitle("This is button title set programmatically", for: .normal)
}
}
}
它确实更新了按钮的标题,但只要我一touch 它,标题就会变回"这是来自界面生成器的按钮标题集".此外,如果我在界面生成器中将按钮"Style"属性设置为"Default"而不是"Plain",它将开始完全忽略我设置为configuration.title
的任何值.调试显示,分配的按钮配置确实具有更新的标题,但它与其在屏幕上呈现的完全不同:
(lldb) po button.configuration?.title
▿ Optional<String>
- some : "This is button title set programmatically"
从界面生成器返回到值的按钮标题如下所示:
以下是按钮在界面生成器中的配置方式:
到目前为止,我找到的唯一修复方法是在配置更新处理程序中更新此按钮的标题,如下所示:
var configuration = UIButton.Configuration.borderless()
...
button.configuration = configuration
button.configurationUpdateHandler = { button in
button.configuration?.title = "This is button title set programmatically"
}
问题是,如果我只希望我的按钮在不同的控件状态下具有相同的标题,或者这是一个已知的错误,我真的需要有一个配置更新处理程序吗? 对我来说,如果我在其他州也只有一个冠军头衔,那么似乎真的没有必要添加它.