Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Создание многострочного UILabel для запуска текста сверху, а не посередине

Автор вопроса: Samuli LehtonenОтветов: 2

У меня есть небольшая проблема с многострочным UILabel, мой текст UILabel как-то странно начинается с середины и поднимается вверх, когда появляются новые строки, так что последняя строка всегда находится посередине. Я хочу, чтобы он вел себя как обычный текст, начиная сверху и строк, идущих друг под другом, первая строка оставалась сверху. Извините, если я плохо объяснил, я могу попытаться уточнить, если это необходимо! Заранее спасибо!

cocoa-touchuikituilabel

Ответы

Ответ 1 · рейтинг 11 · Mark Adams

Вы можете использовать метод sizeWithFont:constrainedToSize:lineBreakMode: для NSString, чтобы определить высоту блока текста с учетом шрифта и ограниченной ширины. Затем вы обновите рамку своей этикетки, чтобы она была достаточно большой, чтобы охватить текст.

CGSize textSize = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(label.frame.size.width, MAXFLOAT) lineBreakMode:label.lineBreakMode];
label.frame = CGRectMake(20.0f, 20.0f, textSize.width, textSize.height);

Ответ 2 · Srinivasan N

Поскольку метод sizeWithFont устарел в iOS 7.0+, вы можете использовать альтернативный метод с именем boundingRectWithSize.

Например:

NSDictionary *attrsDictionary =[NSDictionary dictionaryWithObject:YourFont forKey:NSFontAttributeName];
NSAttributedString *attrString =[[NSAttributedString alloc] initWithString:yourString attributes:attrsDictionary];

textRect = [attrString boundingRectWithSize:yourSize options:NSStringDrawingUsesLineFragmentOrigin context:nil];

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы