UIButton 字体大小没有改变

isi*_*fip 17 uikit swift

private func updateViewFromModel() {
    for index in cardButtons.indices {
        let button = cardButtons[index]
        let card = game.cards[index]
        if card.isFaceUp {
            button.setTitle(emoji(for: card), for: .normal)
            button.titleLabel?.font = UIFont.systemFont(ofSize: 50)
            button.backgroundColor = .lightGray
        } else {
            button.setTitle("", for: .normal)
            button.backgroundColor = card.isMatched ? .clear : .systemIndigo
        }
        
    }
}
Run Code Online (Sandbox Code Playgroud)

谁能告诉我这段代码有什么问题吗?IB 中的标题为空。我成功设置了标题。但字体大小没有改变。

Ome*_*yik 56

在 Xcode 13 中,UIButton 有四种类型Plain,Grain,Tinted,Filled。当您在 Storyboard 中创建按钮时,按钮类型会自动设置为 Plain,这意味着新的 UIButton 配置已启用。如果您想要旧的行为,则必须将 style 设置plaindefault

或者,如果您想要以上款式之一。您需要设置字体,例如

button.configuration?.titleTextAttributesTransformer =
   UIConfigurationTextAttributesTransformer { incoming in
     var outgoing = incoming
     outgoing.font = UIFont.systemFont(ofSize: 50)
     return outgoing
 }
Run Code Online (Sandbox Code Playgroud)

  • 最后,一个适用于最新 UIbutton 类型的适当答案。非常感谢。但他们似乎让事情变得更加复杂了。 (5认同)

小智 12

只需在情节提要中将按钮样式从普通更改为默认即可


小智 7

以下@Omer Tekbiyik 回答请注意, 是titleTextAttributesTransformer的参数UIButton.ConfigurationUIButton因此可能的实现是:

var config = UIButton.Configuration.plain()
config.titleTextAttributesTransformer = UIConfigurationTextAttributesTransformer { incoming in
   var outgoing = incoming
   outgoing.font = UIFont(name: "AlmoniTzarAAA", size: 20) ?? .systemFont(ofSize: 20)
   return outgoing
}
Run Code Online (Sandbox Code Playgroud)