3

我正在尝试为 a显示的 a打开连字( NSLigatureAttributeName)NSAttributedStringUILabel

我的目标是 iOS 6.1 并在 iPad 模拟器中运行。

我的一组测试词是:

  • 孢子
  • 乳糜泻
  • 半途而废
  • 悬而未决
  • 委托人
  • 鼻烟壶
  • 领地简报
  • 脱轨
  • 大欣拉夫特
  • 棺材

我的测试代码很简单,它遍历单词列表并UILabel使用text属性在 a 中显示一个:

self.normalLabel.text = words[i];

另一个使用该attributedText属性,在创建后(有关 的值的更多信息,NSAttributedString请参见Brandon Campbell 的NSLigatureAttributeName回答):

NSDictionary *attrs = @{    NSFontAttributeName : [UIFont systemFontOfSize:74.0],
                            NSLigatureAttributeName : @1, //@2 not supported in iOS
                            NSBackgroundColorAttributeName : [UIColor redColor]};

self.attr.attributedText = [[NSAttributedString alloc] initWithString:words[i] attributes:attrs];

如您所见,我设置NSLigatureAttributeName为 2 (作为NSNumber)。但这对单词没有影响:

使用属性字符串在 UILabel 中连字不起作用

使用属性字符串在 UILabel 中连字不起作用

我正在使用systemFont(Helvetica Neue),这是一个调试器输出:

(lldb) po self.attr.attributedText
$0 = 0x0719bc90 aeciospore{
    NSBackgroundColor = "UIDeviceRGBColorSpace 1 0 0 1";
    NSFont = "<UICFFont: 0x719cc80> font-family: \".Helvetica NeueUI\"; font-weight: normal; font-style: normal; font-size: 74px";
    NSLigature = 1;
}
(lldb) 
4

3 回答 3

3

根据文档,NSLigatureAttributeName 2 在 iOS 上不受支持。

NSLigatureAttributeName 该属性的值是一个包含整数的 NSNumber 对象。连字导致使用与这些字符对应的单个自定义字形呈现特定的字符组合。值 0 表示没有连字。值 1 表示使用默认连字。值 2 表示使用所有连字。此属性的默认值为 1。(请注意,值 2 在 iOS 上不受支持。)在 iOS 6.0 及更高版本中可用。

http://developer.apple.com/library/ios/#documentation/uikit/reference/NSAttributedString_UIKit_Additions/Reference/Reference.html

于 2013-05-03T12:15:56.620 回答
1

这可能无法帮助您解决大多数测试词的问题,但NSLigatureAttributeName的文档指出:

English text has no essential ligatures, and typically has only two standard ligatures,
those for “fi” and “fl”—all others being considered more advanced or fancy.

coffins根据该信息,您没有看到与 有任何区别,我感到很惊讶。

于 2013-05-15T03:27:51.910 回答
0

iOS 6 附带的 Helvetica Neue不支持 ligatures,使用Hoefler Text解决了这个问题。

于 2013-05-21T08:49:53.273 回答