2013-12-14 4 views
32

Я создаю приложение в> = iOS6. И я хочу изменить интервал символов в UILabel. Я добавил пользовательский шрифт «FUTURABT HEAVY» в моем приложении, но персонаж слишком близко друг к другу.Как увеличить расстояние между символами в UILabel

У меня есть хороший код here, чтобы увеличить расстояние между символами. Но если бы я попытался изменить его, то мой текст стал выравниваться слева от центра.

Пожалуйста, помогите мне в этой ситуации.

ответ

70

Вы, вероятно, следует использовать NSAttributedString с NSKernAttributeName атрибутом

Вот небольшой пример:

UILabel *label = [[UILabel alloc] initWithFrame:self.view.bounds]; 

NSString *string = @"Some important text"; 
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:string]; 

float spacing = 5.0f; 
[attributedString addAttribute:NSKernAttributeName 
      value:@(spacing) 
      range:NSMakeRange(0, [string length])]; 

label.attributedText = attributedString; 
[self.view addSubview:label]; 
+0

Если вы хотите установить его с Interface Builder, добавить подкласс UILabel, переопределения SetText: метод, а затем установите MyLabel как имя класса для ваших ярлыков в Interface Builder. Оно работает! :) – codeburn

+0

попробовал, решение работает, однако в моем случае мне нужно сосредоточить ярлык, а автоматический макет работает некорректно –

+0

Если кому-то нужно решение, проверьте его здесь: http://stackoverflow.com/a/35156265/4173671 –

54

Swift расширение для этого

extension UILabel { 
    func addCharactersSpacing(spacing:CGFloat, text:String) { 
     let attributedString = NSMutableAttributedString(string: text) 
     attributedString.addAttribute(NSKernAttributeName, value: spacing, range: NSMakeRange(0, text.characters.count)) 
     self.attributedText = attributedString 
    } 
} 

Таким образом, вы можете использовать его

MyLabel.addCharactersSpacing(5, text: "Some Text") 
+0

Thanx для добавления быстрого кода, это определенно поможет кому-то. для вас. – Dilip

+0

Спасибо большое @Dilip – Steve

+1

Спасибо за вашу помощь! В конце строки было дополнительное пространство (что в моем случае вызывало проблему с горизонтальной центрировкой), но я исправил ее, изменив диапазон на NSMakeRange (0, text.characters.count - 1) – tdon

0
NSString *strDigit= @"001"; 
    NSString *strCrushImpact =[NSStringstringWithFormat:@"%d",[strDigit intValue]]; 

     // Set space in between character 
    float spacing = 3.0f; 

    NSMutableAttributedString *attributedStrDigit = [[NSMutableAttributedString alloc] initWithString:strWin]; 
    [strCrushImpact addAttribute:NSKernAttributeName value:@(spacing) 
      range:NSMakeRange(0, [strDigit length])]; 
label.attributedText = attributedStrDigit; 
2

Swift 4

extension UILabel { 

    func setCharacterSpacing(characterSpacing: CGFloat = 0.0) { 

     guard let labelText = text else { return } 

     let attributedString: NSMutableAttributedString 
     if let labelAttributedText = attributedText { 
      attributedString = NSMutableAttributedString(attributedString: labelAttributedText) 
     } else { 
      attributedString = NSMutableAttributedString(string: labelText) 
     } 

     // Character spacing attribute 
     attributedString.addAttribute(NSAttributedStringKey.kern, value: characterSpacing, range: NSMakeRange(0, attributedString.length)) 

     attributedText = attributedString 
    }   

} 

Swift 3

let label = UILabel() 
let stringValue = "Sample text" 
let attrString = NSMutableAttributedString(string: stringValue) 
attrString.addAttribute(NSKernAttributeName, 2: style, range: NSRange(location: 0, length: stringValue.characters.count)) 
label.attributedText = attrString 
Смежные вопросы