相邻的“f”和“l”字符

时间:2012-07-10 23:40:13

标签: ios uilabel typography uifont ligature

出于某种原因,当我显示单词“Butterfly”(或带有“fl”的任何其他内容)时,“f”和“l”连接在顶部(见下图)。字体是Century Gothic Bold。这是我用来设置UILabel的代码。从plist中检索标签的字符串:

UILabel *label = [[UILabel alloc] init];
label.text = [self.flashcardDelegate.alphabetArr objectAtIndex:index];
label.textColor = [UIColor colorWithRed:.733 green:0 blue:.03137 alpha:1];
label.backgroundColor = [UIColor clearColor];
label.frame = CGRectMake(ipad ? 210.0f : 65.0f, 
                         ipad ? 650.0f : 300.0f, 
                         ipad ? 340.0f : 185.0f, 
                         ipad ? 250.0f : 135.0f);
label.font = [UIFont fontWithName:@"CenturyGothic-Bold" size:ipad ? 200 : 100];
label.textAlignment = UITextAlignmentCenter;

知道为什么会这样吗?感谢。

screenshot

3 个答案:

答案 0 :(得分:5)

它被称为结扎,它是故意的。如果您使用的是核心文本,则可以使用kCTLigatureAttributeName属性更改操作系统渲染连字的方式,如果您使用的是NSAttributedString,则可以使用NSLigatureAttributeName

答案 1 :(得分:1)

你所看到的被称为ligature - 这个想法最初是为了更容易处理印刷机的金属块上的字距调整(将一个字形用于常用字符对),但是现在作为一个主要的风格决定坚持到现代时代。

我不确定如何在API中禁用它,但希望这些额外的背景信息可以帮助您找到答案。

答案 2 :(得分:0)

这是一个简短的方法。 iOS 6.0 +

NSMutableAttributedString *attributedString;
attributedString = [[NSMutableAttributedString alloc] initWithString:label.text];
[attributedString addAttribute:NSLigatureAttributeName value:@0 range:NSMakeRange(0, label.text.length)];
[label.text setAttributedText:attributedString];
[attributedString release];