Рассчитать размер NSAttributedString из HTML - PullRequest
0 голосов
/ 10 апреля 2019

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

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

// 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

1 Ответ

0 голосов
/ 10 апреля 2019

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

[self.textView setTextContainerInset:UIEdgeInsetsZero];
self.textView.textContainer.lineFragmentPadding = 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...