Как увеличить расстояние между символами в UILabel
Я создаю приложение в >= iOS6. И я хочу изменить интервал символов в UILabel. Я добавил пользовательский шрифт "FUTURABT HEAVY" в моем приложении, но персонаж слишком близко друг к другу.
Я нашел хороший код здесь, чтобы увеличить интервал между символами. Но если бы я попытался изменить его, чем мой текст стал выравниваться слева от центра.
Пожалуйста, помогите мне в этой ситуации.
Ответы
Ответ 1
Вероятно, вы должны использовать 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];
Ответ 2
Быстрое расширение для этого
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")
Ответ 3
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
Ответ 4
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;
Ответ 5
Swift 4.2 с расширением UILabel и @IBInspectable
extension UILabel {
@IBInspectable var letterSpacing: CGFloat {
get {
var range:NSRange = NSMakeRange(0, self.text?.count ?? 0)
let nr = self.attributedText?.attribute(NSAttributedString.Key.kern, at: 0, effectiveRange: &range) as! NSNumber
return CGFloat(truncating: nr)
}
set {
let range:NSRange = NSMakeRange(0, self.text?.count ?? 0)
let attributedString = NSMutableAttributedString(string: self.text ?? "")
attributedString.addAttribute(NSAttributedString.Key.kern, value: newValue, range: range)
self.attributedText = attributedString
}
}
}