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

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


person Samuli Lehtonen    schedule 03.03.2011    source источник


Ответы (2)


Вы можете использовать метод 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);
person Mark Adams    schedule 03.03.2011
comment
Вам также может понадобиться установить label.numberOfLines=0 - person Nimit Pattanasri; 06.04.2012

Поскольку метод 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];
person Srinivasan N    schedule 07.07.2015