本地化 UIButton 时字体发生变化 Xcode

Font changes when localizing UIButton Xcode

当我尝试本地化 UI 按钮时,字体发生了变化。本地化本身有效;我可以看到语言在变化,但字体也在变化 我尝试使用基本国际化、本地化字符串和不同的 pods 进行本地化,但字体仍然在变化。我使用界面构建器创建了 UIButtons 并在界面构建器中设置了字体,还尝试以编程方式创建 UIButton 但字体仍然发生变化。它只针对 UIButtons 发生变化,我对 UILabels 或 UITexfields 没有这个问题。

这是 UI按钮在本地化之前的样子:

Button1

UI按钮在本地化后的样子:

Button1

这是我用来设置按钮并以编程方式对其进行本地化的代码:

@IBOutlet weak var button1: UIButton!


override func viewDidLoad() {
    super.viewDidLoad()

    button1.titleLabel?.font = UIFont(name: "Helvetica Bold", size: 20)
    
    button1.setAttributedTitle(NSAttributedString(string: NSLocalizedString("button1", comment: "")), for: .normal)

    
}

为了使用界面生成器进行本地化,我使用了一个 pod,您可以在其中为 UI 元素提供本地化键,但同样的问题出现了。

UIButton 对象可以通过两种主要方式配置:

  1. 传统上,通过直接在按钮及其标签上设置属性(如您在上面的代码中所做的那样),或者
  2. 从 iOS 15 开始,通过 UIButton.configuration 一次设置多个属性

虽然这似乎没有被过度清楚地记录下来,但是当您在按钮上设置 configuration 时,这些属性会覆盖您可能分配给按钮属性的任何内容。对于为 iOS 15+ 创建的 iOS 项目,故事板中创建的按钮默认设置为在属性检查器中使用按钮配置:Plain、Filled、Gray 和 Tinted“样式”提供的选项对应于静态 plain()filled()gray()tinted() 默认按钮配置 offered by UIButton.Configuration.

当在故事板的 UIButton 上设置其中一种样式时,您尝试在代码中设置的属性将被其配置覆盖。您有两个主要选择:

  1. 在情节提要中将按钮样式设置为默认,这样可以避免对按钮应用配置,并允许您使用传统属性来设置按钮样式,或者
  2. 改为使用其配置设置按钮样式

对于目标 iOS 低于 iOS 15 的版本的应用程序,(1) 是唯一的选项(无论如何应该是情节提要中的默认选项);但如果您选择使用 (2),则等效配置可能类似于:

var attributes = AttributeContainer()
attributes.font = UIFont(name: "Helvetica Bold", size: 20)

let title = AttributedString(NSLocalizedString("button1", comment: ""), attributes: attributes)
button1.configuration.attributedTitle = title