Рассчитать размер NSAttributedString из HTML

Я использую UITextView для отображения NSAttributedString из некоторого заданного HTML, который может включать такие элементы, как жирный шрифт, курсив, списки, пометки, надстрочный и нижний индекс и т. д.

В настоящее время приведенный ниже код работает довольно хорошо только для абзацев текста, но как только я начну добавлять более сложные элементы, такие как списки и разрывы строк, размеры полностью исчезнут.

// Create the NSMutableAttributedString from given HTML
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *options = @{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
                          NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)};
NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithData:data options:options
                               documentAttributes:nil error:nil];

// Max size for the text container (no limit on height)
CGSize bounds = CGSizeMake(320.0, CGFLOAT_MAX);

// Set the font and size for better rendering results
UIFont *font = [UIFont fontWithName:@"Roboto" size:14.0];
NSDictionary *attrFont = [NSDictionary dictionaryWithObject:font forKey:NSFontAttributeName];
NSRange range = NSMakeRange(0, str.length);
[str addAttributes:attrFont range:range];

// Calcualte the size of the UITextView based on the above parameters
CGRect rect = [str boundingRectWithSize:bounds options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading|        NSStringDrawingUsesDeviceMetrics context:nil];

Я немного поискал и нашел эту ветку, но после того, как я попробовал то, что там предлагается, она все еще не работает, интересно, знает ли кто-нибудь лучший способ сделать это?

Вычислить высоту NSAttributedString, содержащей HTML

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хорошо, после долгих возни я обнаружил, что размеры на самом деле правильные, но у UITextView есть некоторые отступы / вставки, которые вызывают переполнение. Установка следующего в textView устранила проблему

[self.textView setTextContainerInset:UIEdgeInsetsZero];
self.textView.textContainer.lineFragmentPadding = 0;

Существует большая разница между "размер полностью сбился" и тем, что он немного отключен из-за небольших вставок текстового представления. Кстати, другое решение - настроить рассчитанный размер текста с помощью вставок текстового представления.

rmaddy 10.04.2019 03:48

@rmaddy на первый взгляд он был полностью выключен (отрезал целые строки), но я могу обновить формулировку.

Asleepace 10.04.2019 03:52

@rmaddy как бы вы рассчитали со вставками?

Asleepace 10.04.2019 03:58

Добавьте вставки текстового представления к вычисляемому rect.

rmaddy 10.04.2019 03:59

Другие вопросы по теме