web-dev-qa-db-ja.com

NSAttributedStringで本当に行を閉じますか?

ボタンの2行のテキストを非常に近くに(小さな行間隔で)表示したい。私は次のコードを持っています:

NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"50 WPM"];

NSMutableParagraphStyle *paragrapStyle = [[NSMutableParagraphStyle alloc] init];
paragrapStyle.alignment = NSTextAlignmentCenter;
paragrapStyle.lineSpacing = -10;

[string addAttribute:NSParagraphStyleAttributeName value:paragrapStyle range:NSMakeRange(0, string.length)];

UIFont *font1 = [UIFont systemFontOfSize:22.0];
[string addAttribute:NSFontAttributeName value:font1 range:NSMakeRange(0, string.length - 4)];

UIFont *font = [UIFont systemFontOfSize:15.0];
[string addAttribute:NSFontAttributeName value:font range:NSMakeRange(string.length - 3, 3)];

[string addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:NSMakeRange(0, string.length)];

[self.button setAttributedTitle:string forState:UIControlStateNormal];

しかし、行間隔をマイナスにすることはできないため、私が望むほどには近づきません。次のようになります。

enter image description here

それらを近づける方法はありますか?

22
Doug Smith

属性文字列がある場合は、すべてが可能であるはずです。 :)あなたはただもっと見る必要があります。

- (void)setMinimumLineHeight:(CGFloat)aFloat
- (void)setMaximumLineHeight:(CGFloat)aFloat

試してみてください

[paragraphStyle setLineSpacing:0.0f];
[paragraphStyle setMaximumLineHeight:7.0f];

MaximumLineHeightがmaximumLineSpacingではないことがわかります。 ^^

これは、たとえばsetMaximumLineHeight:12];

enter image description here

57
nscoding

IOS7で導入された TextKit を読むことをお勧めします。私はそれから多くの経験を持っていません、しかしそれがあなたのテキストを帰属させることに関してあなたに多くの可能性を与えることを私は知っています。

0
Daniel Larsson

Swift 3では、次の方法でこれを実現できます:

let paragraph = NSMutableParagraphStyle()
paragraph.lineSpacing = 0
paragraph.maximumLineHeight = 20.

LineSpacing = 0を維持します。maximumLineHeightを調整して、近づけたり、間隔を広げたりすることができます。

0
Joshua Cleetus

ここに負のlineSpacingをサポートするSwift3の小さな拡張があります

extension UILabel {
    func set(lineSpacing: CGFloat, textAlignment: NSTextAlignment = NSTextAlignment.center) {
        if let text = self.text {
            let paragraphStyle = NSMutableParagraphStyle()
            if lineSpacing < 0 {
                paragraphStyle.lineSpacing = 0
                paragraphStyle.maximumLineHeight = self.font.pointSize + lineSpacing
            } else {
                paragraphStyle.lineSpacing = lineSpacing
            }
            let attrString = NSMutableAttributedString(string: text)
            attrString.addAttribute(NSParagraphStyleAttributeName, value:paragraphStyle, range:NSMakeRange(0, attrString.length))
            self.attributedText = attrString
            self.textAlignment = textAlignment
        }
    }
}
0
rushelmet