web-dev-qa-db-ja.com

UILabelで文字間隔を増やす方法

> = iOS6でアプリを作成しています。そして、UILabelの文字間隔を変更したいと思います。アプリにカスタムフォント「FUTURABT HEAVY」を追加しましたが、キャラクターが近すぎます。

良いコードを見つけました here 文字間隔を広げます。しかし、変更しようとすると、テキストが中央ではなく左揃えになりました。

この状況で私を助けてください。

44
Dilip

おそらく、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];
79
B.S.

このための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")
59
Steve

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

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
13
Krunal
   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;
0
Rakesh Purohit