Подтвердить что ты не робот

Действительно ли близкие строки с NSAttributedString?

Я хочу, чтобы две строки текста отображались очень близко друг к другу (малый интервал между строками) для кнопки. У меня есть следующий код:

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

Есть ли способ приблизиться к ним?

4b9b3361

Ответ 1

Хорошо, если у вас есть строка атрибута, тогда все должно быть возможно.:) Вам просто нужно посмотреть больше.

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

Try

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

Вы поймете, что maximumLineHeight не является максимальным. ^^

Это, например, с setMaximumLineHeight: 12];

enter image description here

Ответ 2

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

Ответ 3

В Swift 3 вы можете достичь этого:

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

Удерживайте lineSpacing = 0. Вы можете отрегулировать максимумLineHeight, чтобы приблизить его или увеличить интервал.

Ответ 4

Здесь небольшое расширение в Swift3, которое поддерживает отрицательную линиюSpacing

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

Ответ 5

Как насчет подкласса UIButton и добавьте 2 UILabels к виду кнопок, которые находятся близко друг к другу. Создайте свойства для меток и установите approrpietly:

CustomButton *btn = [CustomButton new];

btn.textLine1 = @"Top";
btn.textLine2 = @"Bottom";

Единственная проблема, с которой это делается, - это обработать цвет текста при изменении состояния.