XCode - 在Storyboard中更改默认全局字体

14

就像我们可以在Storyboard中设置全局的色调一样,是否可能将全局字体族设为其他内容呢?例如,我想将默认字体从系统更改为Source Sans Pro 16pt。然而,据我所知,我必须执行以下操作之一:

  1. 在Storyboard中更改每个标签、按钮、文本框等的字体。
  2. 通过Swift ViewDidLoad代码(如此问题中所述)或在此问题中解释的扩展方式进行设置。

对于(2),我的问题是我没有像在(1)中使用故事板那样得到视觉反馈。另一方面,这也不太优雅,因为我仍需要手动设置。

那么,有没有一种方法可以更改/设置Storyboard的默认字体呢?


1
抱歉,但您必须手动设置所有标签、按钮等的字体。如果您创建一个globalConstants.h文件并声明一个字体变量,例如let ICON_FONT = UIFont(name: "OpenSans-Bold" size: 30),然后手动为每个标签分配字体。这样,如果您更改字体,只需在globalConstant文件中进行一次更改即可。 - Jitendra Modi
1个回答

9
你可以使用外观 API 来确保所有控件在运行时具有相同的字体。
查看此 问题 以了解如何设置 Appearance 下 UIButton 的字体。
对于 UILabel 和 UITextView,请执行以下操作。这可以在 AppDelegate 的 application(_:didFinishLaunchingWithOptions:) 中完成。
let labelAppearance = UILabel.appearance()
labelAppearance.font = UIFont.myFont()

let textFieldAppearance = UITextView.appearance()
textFieldAppearance.font = UIFont.myFont()

之前的解决方案无法更新storyboard。
要在storyboard上直观地看到更改,请查看以下函数。
prepareForInterfaceBuilder()

这里有一个解答,解释了如何在storyboard中进行可视化更新,但是你需要使用自定义类来处理你的文本框、按钮等。

按照上述链接的代码示例:

@IBDesignable
public class MyUILabel: UILabel {

    public override func awakeFromNib() {
        super.awakeFromNib()
        configureLabel()
    }

    public override func prepareForInterfaceBuilder() {
        super.prepareForInterfaceBuilder()
        configureLabel()
    }

    func configureLabel() {
        font = UIFont(name: Constants.DefaultFont, size: 40)
    }

}

1
但是对于自定义的 MyUILabel,您将不得不更改所有 UILabel 的类,对吗?这难道不像更改所有标签的字体一样重复吗? - tika
1
这个答案难道不就是对楼主的第二点做了更详细的解释吗?除了IB部分,但正如tika所说,没有太多附加价值。 - HAS
@tika 可能会有些重复(尽管我的观点是更改类比更改字体+大小更快),但你所获得的是,当你想要更改整个应用程序的字体时,只需在一个地方进行更改。 - Carien van Zyl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接