在iOS 7中调整字母间距

wst*_*str 36 uilabel ios7 textkit

在iOS 7中,当使用新的从屏幕边缘轻扫手势向后导航时,后退按钮("艺术家")的标题从粉红色(在下面的示例中)淡化并且具有常规字体粗细为黑色并具有粗体字体重.

在此输入图像描述

在我看来,动画使用两个不同的标签,以实现这种效果; 随着另一个淡入淡出,一个淡出.然而,Apple已经以某种方式调整了字体,使常规标签完美地覆盖了粗体,从而产生了在两种不同重量和颜色之间变形的单个标签的错觉.

他们是否只是调整了常规字体上的字母间距,使其与粗体字符匹配?在那种情况下,如何在iOS 7中实现?Text Kit是否有任何令人敬畏的功能,或者我应该怎么做?

Aar*_*ger 90

您可以使用这样调整字母间距NSAttributedString.

在Objective-C中:

NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@"The Clash"];
[attributedString addAttribute:NSKernAttributeName
                         value:@(1.4)
                         range:NSMakeRange(0, 9)];

self.label.attributedText = attributedString;
Run Code Online (Sandbox Code Playgroud)

在Swift中:

let attributedString = NSMutableAttributedString(string: "The Clash")
attributedString.addAttribute(NSKernAttributeName, value: CGFloat(1.4), range: NSRange(location: 0, length: 9))

label.attributedText = attributedString
Run Code Online (Sandbox Code Playgroud)

有关字距调整的更多信息,请参阅"文本编程指南"中的" 印刷概念".

我不认为有一个TextKit功能会自动匹配粗体和常规文本之间的字体间距.

  • 为@"The Clash"+1并提供有用的答案;-) (6认同)

And*_*eev 5

对于Swift 4+,语法很简单:

let text = NSAttributedString(string: "text", attributes: [.kern: 1.4])
Run Code Online (Sandbox Code Playgroud)