Как реализовать межстрочный интервал UILabel, используя xib?
Я хочу выровнять UILabel
текст по вертикали с межстрочным интервалом через xib в iOS, например:
hello,
how are
you?
Пожалуйста, помогите мне.
4 ответа
Да, можно настроить межстрочный интервал через XIB. Нажмите на UIlabel на xib, затем измените тип свойства text на Attributed, затем просмотрите следующие изображения. Затем введите новую строку (нажмите комбинацию клавиш ctrl-return) и удерживайте курсор между двумя строками, затем отрегулируйте свойства "line" и "Max Height", которые вы хотите. Мой текст UILael "Привет, как ты?"
Создайте этот простой подкласс UILabel:
@interface CustomLabel : UILabel
@property (assign, nonatomic) CGFloat myLineSpacing;
@end
@implementation CustomLabel
- (void)setMyLineSpacing:(CGFloat)myLineSpacing {
_myLineSpacing = myLineSpacing;
self.text = self.text;
}
- (void)setText:(NSString *)text {
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineSpacing = _myLineSpacing;
paragraphStyle.alignment = self.textAlignment;
NSDictionary *attributes = @{NSParagraphStyleAttributeName: paragraphStyle};
NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:text
attributes:attributes];
self.attributedText = attributedText;
}
Задавать myLineSpacing
стоимость имущества с ИБ.
Тем не менее, вы не можете просмотреть в IB, но значение межстрочного интервала в xib!
Вы можете установить label.text
в вашем коде, не заботясь о межстрочном интервале.
Замечания:
не делайте имя свойства "lineSpacing
Msgstr "У UILabel есть недокументированное свойство lineSpacing и переопределение, которое что-то ломает.
* Из Интерфейсного Разработчика:**
Программный:
SWift 4
Использование расширения метки
extension UILabel {
// Pass value for any one of both parameters and see result
func setLineSpacing(lineSpacing: CGFloat = 0.0, lineHeightMultiple: CGFloat = 0.0) {
guard let labelText = self.text else { return }
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineSpacing = lineSpacing
paragraphStyle.lineHeightMultiple = lineHeightMultiple
let attributedString:NSMutableAttributedString
if let labelattributedText = self.attributedText {
attributedString = NSMutableAttributedString(attributedString: labelattributedText)
} else {
attributedString = NSMutableAttributedString(string: labelText)
}
// Line spacing attribute
attributedString.addAttribute(NSAttributedStringKey.paragraphStyle, value:paragraphStyle, range:NSMakeRange(0, attributedString.length))
self.attributedText = attributedString
}
}
Теперь вызовите функцию расширения
let label = UILabel()
let stringValue = "How\nto\nimplement\nUILabel\nline\nspacing\nusing\nxib?"
// Pass value for any one argument - lineSpacing or lineHeightMultiple
label.setLineSpacing(lineSpacing: 2.0) . // try values 1.0 to 5.0
// or try lineHeightMultiple
//label.setLineSpacing(lineHeightMultiple = 2.0) // try values 0.5 to 2.0
Или используя экземпляр метки (просто скопируйте и выполните этот код, чтобы увидеть результат)
let label = UILabel()
let stringValue = "How\nto\nimplement\nUILabel\nline\nspacing\nusing\nxib?"
let attrString = NSMutableAttributedString(string: stringValue)
var style = NSMutableParagraphStyle()
style.lineSpacing = 24 // change line spacing between paragraph like 36 or 48
style.minimumLineHeight = 20 // change line spacing between each line like 30 or 40
// Line spacing attribute
attrString.addAttribute(NSAttributedStringKey.paragraphStyle, value: style, range: NSRange(location: 0, length: stringValue.characters.count))
// Character spacing attribute
attrString.addAttribute(NSAttributedStringKey.kern, value: 2, range: NSMakeRange(0, attrString.length))
label.attributedText = attrString
Введите его точно так же, как вы хотите, в любом текстовом редакторе, таком как TextEdit и т. Д., А затем вставьте текстовый раздел вашей метки в xib.
Но убедитесь, что высота вашего ярлыка больше подходит для содержимого, а также увеличьте количество строк. Для этого случая это может быть 3 или больше.