2015-09-28 9 views
10

bir ben Interface Builder görebilirsiniz NSAttributedParagraphStyle ayarlarından sayısız vardır:Xcode 7'de Arabirim Oluşturucusu'nu kullanarak metin karakterlerini nasıl ayarlarsınız?

Ama bunların hiçbiri metin karakter aralığı içindir. Öznitelikli metin için Xcode 7'nin Interface Builder'daki metin karakterini ayarlamanın bir yolu var mı?

(! Kodda bunun nasıl yapılacağı ile cevap etmeyin - Zaten bunu nasıl biliyor)

+0

Hiç bir yolunu buldular mı? Bu yokluğunda göze çarpan görünüyor. – Dov

+0

@Dov nope ... gerçekten de! – brandonscript

cevap

5

. bu aslında arayüz oluşturucu görünmez olsa uygulamanızı çalıştırdığınızda

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 
     } 
    } 
} 

enter image description here

o göstermek ve iş olacaktır.

7

UILabel bir alt sınıfını oluşturun o aşağıdaki kodla oluşmalıdır gelmiş KerningLabel çağırır: Bir etiketi dışarı sürükleyin. UILabel alt sınıfınıza değiştirin. Karakter aralığını istediğiniz gibi ayarlayın. obj-c enter image description here

:

.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; 
    } 
} 

Sen bir uzantısı üzerinden bir alt sınıf kullanılmadan bu gerçekten yapabilen @end

+0

Açıkçası doğal bir seçenek değil, ama oldukça kaygan bir çözüm! Güzel. – brandonscript

+0

Aynı kod parçasının Objective-C sürümünü arıyorum! Bunu nasıl dönüştüreceğimi bilmiyorum ObjC –

+0

@KasunRandika Bkz. [Burada] (https://gist.github.com/bgayman/6c9d1b705b50782e5d19d25f688f6fd9) – beyowulf

0

kısaltılmış girişimi:

@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 
    } 
    } 
} 
İlgili konular