如何在Xcode 7中使用Interface Builder调整文本字距?

有很多NSAttributedParagraphStyle的设置,我可以在Interface Builder中看到:

但是这些都不是用于文本字距调整的。 有没有办法在Xcode 7的界面生成器中调整文本字距以获得属性文本?

(请不要回答如何在代码中做到这一点 – 我已经知道如何做到这一点!)

实际上你可以做到这一点,而不需要通过扩展来使用子类。

 import UIKit @IBDesignable extension UILabel { @IBInspectable public var kerning:CGFloat { set{ if let currentAttibutedText = self.attributedText { let attribString = NSMutableAttributedString(attributedString: currentAttibutedText) attribString.addAttributes([NSKernAttributeName:newValue], range:NSMakeRange(0, currentAttibutedText.length)) self.attributedText = attribString } } get { var kerning:CGFloat = 0 if let attributedText = self.attributedText { attributedText.enumerateAttribute(NSKernAttributeName, in: NSMakeRange(0, attributedText.length), options: .init(rawValue: 0)) { (value, range, stop) in kerning = value as? CGFloat ?? 0 } } return kerning } } } 

在这里输入图像说明

虽然这不会实际显示在界面生成器中,但在运行应用程序时它将显示并工作。

创buildUILabel的子类调用它的KerningLabel有它由以下代码组成:

 import UIKit @IBDesignable class KerningLabel: UILabel { @IBInspectable var kerning:CGFloat = 0.0{ didSet{ if ((self.attributedText?.length) != nil) { let attribString = NSMutableAttributedString(attributedString: self.attributedText!) attribString.addAttributes([NSKernAttributeName:kerning], range:NSMakeRange(0, self.attributedText!.length)) self.attributedText = attribString } } } } 

拖出一个标签。 将其更改为您的UILabel子类。 根据需要调整字距。 在这里输入图像说明

在obj-c中:

.h

 IB_DESIGNABLE @interface KerningLabel : UILabel @property (nonatomic) IBInspectable CGFloat kerning; @end 

.m

 @implementation KerningLabel - (void)setKerning:(CGFloat)kerning { _kerning = kerning; if(self.attributedText) { NSMutableAttributedString *attribString = [[NSMutableAttributedString alloc]initWithAttributedString:self.attributedText]; [attribString addAttribute:NSKernAttributeName value:@(kerning) range:NSMakeRange(0, self.attributedText.length)]; self.attributedText = attribString; } } 

@结束

缩短的尝试:

 @IBDesignable class KerningLabel: UILabel { @IBInspectable var kerning: CGFloat = 0.0 { didSet { let attrStr = NSMutableAttributedString(string: "Foobar") attrStr.addAttributes([NSKernAttributeName: kerning], range: NSMakeRange(0, attrStr.string.characters.count)) attributedText = attrStr } } } 
Interesting Posts