Действительно ли близкие строки с 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]()
Есть ли способ приблизиться к ним?
Ответы
Ответ 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";
Единственная проблема, с которой это делается, - это обработать цвет текста при изменении состояния.