Я пытаюсь понять способ понять, в каком диапазоне экземпляр UILabel будет обрезать текст. Я знаю, как получить размер, который займет строка, используя -sizeWithFont:constrainedToSize:lineBreakMode:
.
Предположим, что у нас есть UILabel около 5 строк и длинный текст, используя вышеописанный метод, я могу знать, будет ли это соответствовать или нет. Если это не подходит, я хотел бы добавить еще один UILabel с остальным текстом. Я делаю это, потому что макет представления смешан с изображением, и когда изображение заканчивается, я хотел бы иметь текст по всей ширине представления.
Я знаю, что с основным текстом я могу сделать это только в одном представлении, но я бы предпочел легко с UILabel.
/* IMAGE */##/* TEXT */
/* IMAGE */##/* TEXT */
/* IMAGE */##/* TEXT */
/* IMAGE */##/* TEXT */
/* IMAGE */##/* TEXT */
/* ** * *ТЕКСТ* ** * ** * ** * *** /
/ ** * ***TEXT* ** * ** * ** * *** /
/ ** * ***TEXT* ** * ** * ** * ****/
Как получить диапазон, в котором UILabel будет усекать текст
2
A
ответ
2
Ну я нашел решение ответ является дубликатом Get truncated text from UILabel
Я скопирую измененный метод из этого ответа, вам нужно импортировать структуру CoreText и убедиться, что метка установлена на перенос слов:
- (NSArray *)truncate:(NSString *)text forLabel: (UILabel*) label
{
NSMutableArray *textChunks = [[NSMutableArray alloc] init];
NSString *chunk = [[NSString alloc] init];
NSMutableAttributedString *attrString = nil;
UIFont *uiFont = label.font;
CTFontRef ctFont = CTFontCreateWithName((__bridge CFStringRef)uiFont.fontName, uiFont.pointSize, NULL);
NSDictionary *attr = [NSDictionary dictionaryWithObject:(__bridge id)ctFont forKey:(id)kCTFontAttributeName];
attrString = [[NSMutableAttributedString alloc] initWithString:text attributes:attr];
CTFramesetterRef frameSetter;
CFRange fitRange;
while (attrString.length>0) {
frameSetter = CTFramesetterCreateWithAttributedString ((__bridge CFAttributedStringRef) attrString);
CTFramesetterSuggestFrameSizeWithConstraints(frameSetter, CFRangeMake(0,0), NULL, CGSizeMake(label.bounds.size.width, label.bounds.size.height), &fitRange);
CFRelease(frameSetter);
chunk = [[attrString attributedSubstringFromRange:NSMakeRange(0, fitRange.length)] string];
[textChunks addObject:chunk];
[attrString setAttributedString: [attrString attributedSubstringFromRange:NSMakeRange(fitRange.length, attrString.string.length-fitRange.length)]];
}
return textChunks;
}
+1
FYI длина первой строки в массиве textChunks будет длиной диапазона усеченной строки. – Kevin
Смежные вопросы
- 1. Усекать текст в TTStyledTextLabel
- 2. Аксессуар соты продолжает усекать UILabel
- 3. Усекать текст в d3
- 4. Усекать текст в ngTable
- 5. Как получить случайный текст UILabel?
- 6. Усекать текст в столбце RadGrid
- 7. Усекать скопированный текст в Интернете
- 8. Усекать текст с помощью implode
- 9. Как щелкнуть текст UILabel
- 10. Усекать текст без попадания вложенной ссылки
- 11. Усекать текст после ng-repeat
- 12. UILabel обновляет текст UILabel
- 13. UILabel не будет обертывать
- 14. Подчеркнутый текст в UIlabel
- 15. Вычислить диапазон видимого текста в UILabel
- 16. Как обновить текст uilabel
- 17. Как размыть текст UILabel
- 18. Как установить URL + текст в текст UILabel
- 19. Усекать текст в RichTextBox и TextBox
- 20. Усекать текст, но сохранить html в javascript
- 21. Как получить UIView, который отображает текст, который будет вести себя как UILabel при изменении границ?
- 22. Как получить высоту текста, это будет отображаться объектом UILabel?
- 23. Как обрабатывать длинный текст UILabel
- 24. UILabel Текст
- 25. UILabel touch и получить текст, который коснулся
- 26. Изменить текст UILabel в UIScrollView
- 27. Как сделать текст в UILabel заполнить все пространство в UILabel?
- 28. Текст центра в UILabel
- 29. Как разрешить текст в UILabel размытым?
- 30. Доступный текст в UILabel
Я не думаю, что в iOS встроена функциональность, которая уведомляет, когда текст выходит за пределы внутри UILabel. – rakeshNS