UILabel 在使用文本设置属性时显示自定义字体错误,但在代码中设置时工作正常

Posted

技术标签:

【中文标题】UILabel 在使用文本设置属性时显示自定义字体错误,但在代码中设置时工作正常【英文标题】:UILabel displays custom font wrong when using text setting attributed, but works fine when set in code 【发布时间】:2015-04-26 22:29:26 【问题描述】:

因此,当我使用文本设置为普通的 UILabel 时,自定义字体在应用程序和 IB 中正确显示,但是当我将其设置为属性时,它在 IB 中看起来很好,但在应用程序中却没有。

我以编程方式在任何地方使用带有属性字符串的自定义字体,它工作得很好。

我已经通过字体书在我的 Mac 上安装了字体,并通过在 info.plist 和构建阶段的复制资源部分中设置适当的属性将字体安装到我的应用程序中。我也在使用 Xcode 6.1.1

我添加了一个 sample project 来说明我的问题

这是在 IB 中设置的 XIB 中标签的 html。如您所见,它设置为自定义字体。

<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" usesAttributedText="YES" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO"
translatesAutoresizingMaskIntoConstraints="NO" id="kpn-Ch-m1y">
  <rect key="frame" x="20" y="84"   />
  <constraints>
    <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="100" id="tyA-gf-Vjj" />
  </constraints>
  <attributedString key="attributedText">
    <fragment content="the attack of the chicken lover">
      <attributes>
        <font key="NSFont" size="11" name="HelveticaNeueLTStd-Cn" />
        <font key="NSOriginalFont" size="11" name="HelveticaNeueLTStd-Cn" />
        <paragraphStyle key="NSParagraphStyle" alignment="natural" lineBreakMode="wordWrapping" baseWritingDirection="natural" />
      </attributes>
    </fragment>
  </attributedString>
  <nil key="highlightedColor" />
  <variation key="heightClass=compact" ambiguous="YES">
    <rect key="frame" x="23" y="84"   />
  </variation>
  <variation key="heightClass=compact-widthClass=compact" ambiguous="YES">
    <rect key="frame" x="23" y="84"   />
  </variation>
</label>

当您打印在 IB 中设置了属性字符串的叛徒标签的内容时,会发生以下情况。正如您所看到的那样,在将其作为浓缩 helvetica 字体的 XIB 与应用程序中的 helvetica 常规字体之间发生了一些事情。

2015-02-25 17:35:09.726 FontTest[25984:360263] Helvetica Nueue Condensed
    NSColor = "UIDeviceWhiteColorSpace 0 1";
    NSFont = "<UICTFont: 0x792604b0> font-family: \".HelveticaNeueInterface-Regular\"; font-weight: normal; font-style: normal; font-size: 14.00pt";
    NSParagraphStyle = "Alignment 0, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 0/0, LineHeightMultiple 0, LineBreakMode 4, Tabs (\n    28L,\n    56L,\n    84L,\n    112L,\n    140L,\n    168L,\n    196L,\n    224L,\n    252L,\n    280L,\n    308L,\n    336L\n), DefaultTabInterval 0, Blocks (null), Lists (null), BaseWritingDirection -1, HyphenationFactor 0, TighteningFactor 0, HeaderLevel 0";

(lldb) 

【问题讨论】:

我有同样的问题:在 IB 上将标签设置为使用“属性文本”,运行应用程序,标签显示错误的字体(无衬线......也许是系统字体?)。设置回“纯文本”并呈现指定的字体。记录标签字体的系列名称在两种情况下都会给出指定的字体! 是的,这很令人讨厌。我将强烈反对在未来的项目中使用任何自定义字体。使用开箱即用的 ios 字体时,我也会遇到自定义字体的高度计算错误,但这是另一个问题。 【参考方案1】:

你在代码中设置的字体

NSDictionary *attributes = @NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeueLTStd-Cn" size:17];

当您将其更改为 HelveticaNeueLTStd-Cn 17.0 时,在 IB 中

是一样的。 查看屏幕截图。

我猜你没有设置第一张图片中显示的字体。

【讨论】:

注意第一个和第二个是一样的。他们不应该,第一个是系统字体 17,第二个设置为 HelveticaNeueLTStd-Cn 17.0。第三个设置为以编程方式设置为 HelveticaNeueLTStd-Cn 17.0,而第二个设置为 IB。第二个和第三个应该看起来一样,但不是。

以上是关于UILabel 在使用文本设置属性时显示自定义字体错误,但在代码中设置时工作正常的主要内容,如果未能解决你的问题,请参考以下文章

选择表格视图单元格时显示自定义 UIImageView

违反约束时显示自定义消息 PL/SQL

以编程方式将 UILabel 字体设置为用户定义的运行时属性

在 iOS UILabel 上设置 BOLD 字体

仅在填充Wordpress时显示自定义字段

iOS 文本字体的默认宽度和高度