Есть ли способ получить корректный размер использования NSString:
- (CGSize)sizeWithFont:(UIFont *)font forWidth:(CGFloat)width lineBreakMode:(UILineBreakMode)lineBreakMode
это не становится отброшенным 2 или 3 сотнями символьных строк. В данный момент, если я пытаюсь использовать этот метод на этих длинных строках, он неправильно вычисляет их, и я заканчиваю с большим количеством пробела у основания UITextView.
Я попытался использовать UILineBreakModeWordWrap и UILineBreakModeCharacterWrap.
в изменении размеров выполняют
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
CGFloat result = 44.0f;
NSString* text = nil;
CGFloat width = 0;
CGFloat tableViewWidth;
CGRect bounds = [UIScreen mainScreen].bounds;
tableViewWidth = bounds.size.width;
width = tableViewWidth - 150;
text = stringWithLongWords;
if (text) {
CGSize textSize = { width, 20000.0f };
CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:10.0f] constrainedToSize:textSize lineBreakMode:UILineBreakModeWordWrap];
size.height += 50.0f;
result = MAX(size.height, 44.0f+30.0f);
}
return result;
}
Вы сказали, что у вас есть UITableView
с разной высотой. Вы установили одинаковый идентификатор повторного использования для всех ячеек? Возможно, старые ячейки с уже установленной высотой используются повторно. Если это проблема, вам следует снова изменить размер ячейки при ее повторном использовании.
UITextView
не совсем похож на UILabel
, обернутый в UIScrollView
. Он имеет межстрочный интервал, отличный от размера шрифта, и поля, которые sizeWithFont:constrainedToSize:linkBreakMode:
не учитывает.
Зная размер шрифта, вы можете рассчитать количество строк и учесть межстрочный интервал. Вы можете догадаться о полях и попытаться обмануть sizeWithFont:
, чтобы получить более полезный ответ.
Популярными решениями, похоже, являются:
просто использовать UILabel
, если вам не нужна функциональность UITextView
если вам нужны гиперссылки
, наложите UIButton
, которые выглядят как гиперссылки, на UILabel
используйте внеэкранный UITextView
и его sizeToFit
метод, чтобы получить реальный ответ
Мне не повезло с 3-м вариантом, но, похоже, он должен работать, так что, возможно, я сделал что-то не так.
Я собираюсь попробовать использовать UILabel
и наложить кнопки для гиперссылок. Посмотрим, что из этого получится.
Если не получится, всегда есть вариант, который использовал Лорен Брихтер (известный по Tweetie): нарисовать все в UIView
самостоятельно, используя CoreGraphics
.
Удачи!