【问题标题】:Changing the font of every UILabel in a large app更改大型应用程序中每个 UILabel 的字体
【发布时间】:2013-01-03 04:44:52
【问题描述】:

这是一个有趣的问题:

我们正在重新设计整个应用程序,其中包含超过 100,000 行代码和近 100 个 XIB 文件。新设计要求(几乎)应用中的每个标签都使用新的自定义字体,而旧应用使用 Helvetica Neue 的默认字体。

更改尽可能多的 UILabel 的最有效方法是什么?我们不想手动更改代码和 XIB 中的数千个标签(这尤其困难,因为我们使用的是非系统字体)。

我们已经讨论了将 UILabel 的创建方法调整为默认使用新的自定义字体,这仍然允许在创建后自定义 Helvetica Neue 中保留的少数标签。

想法?

【问题讨论】:

    标签: ios fonts skinning swizzling


    【解决方案1】:

    看看 NUI https://github.com/tombenner/nui。 您可以使用类似 CSS 的样式表自定义很多控件,并通过子类或类别实现它。

    【讨论】:

    • 这涵盖了我们的大部分案例,但我使用 Martol1ni 的答案来解决其余的问题。谢谢大家!
    • 我喜欢这个想法,但你真的必须从一开始就使用 NUI。如果您在 nib 和代码中设置字体,然后您尝试使用 NUI 为您的应用程序添加白标签,您不能只是一揽子更改标签,因为 NUI 将忽略您在代码中设置的所有特定字体。您必须返回并将 NUI CSS 类添加到您在代码中设置字体的所有标签中,这将是大量工作。
    【解决方案2】:

    您可能应该继承 UILabel 并覆盖您选择的 init 方法或 awakeFromNib,并在那里设置自定义字体。然后你可以手动浏览xib,或者在文本编辑器中打开它并添加一行

    <string key="X.CustomClassName">YourCustomLabelClass</string>
    

    将指定的标签设置为您的自定义标签类。

    【讨论】:

      【解决方案3】:

      Swizzling 是一个不错的选择。如果您想以其他方式执行此操作并且遇到自定义字体问题,我通常会创建一个简单的 UILabel 子类,它会在 awakeFromNib 中为每种自定义字体更改它的字体,以便我可以在界面构建器中布置它们。

      但是……我想到了: [[UILabel 外观] setFont:xxx];

      不过,我不确定您将如何处理保持大小的问题。也许调酒是最好的选择

      【讨论】:

      • 我的印象是 UILabel 不支持 UIAppearance (stackoverflow.com/questions/11839044/…),但它似乎偶尔会起作用。
      • 该死的,值得一试。看起来 UIAppearance 是要解决的问题类型。
      • 肯定的;奇怪的是,尽管 UILabel 的字体属性没有被标记为 UI_APPEARANCE_SELECTOR!
      猜你喜欢
      • 2017-03-06
      • 2012-05-11
      • 2013-09-24
      • 1970-01-01
      • 2021-07-03
      • 2015-07-15
      • 1970-01-01
      • 2014-03-25
      • 1970-01-01
      相关资源
      最近更新 更多