Как получить NSAttributedString из CGSIZE для UITextView?
Я создаю приложение-читатель, используя UITextView
и NSAttributedString
, мне нужно разделить целую атрибутированную строку на меньшее количество присваиваемой строки, чтобы включить концепцию страниц.
У меня есть метод для вычисления размера кадра данной атрибутной строки.
CGRect rect = [attrString boundingRectWithSize:CGSizeMake(768, 10000) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil];
Но мне нужно получить атрибутString для (768, 1024) ContentSize.
Я использовал это, но атрибуты присваиваются не правильно, потому что он содержит NSTextAttachment
и HTML
stings.
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)delegate.attributedString);
Как я могу это вычислить? и он должен быть быстрым и требует небольшого объема памяти.
Ответы
Ответ 1
Если вы хотите знать размер UITextView
, вы не должны запрашивать ограничивающий прямоугольник текста, потому что это не размер представления. UITextView
содержит отступы, и вам нужно учитывать это.
Лучшим и более простым способом является вызов sizeToFit
в текстовом режиме сразу после добавления текста. Позже просто спросите о кадре UITextView
.
Ответ 2
Вы можете использовать функцию UITextView sizeThatFits:
[textView sizeThatFits:CGSizeMake(768, 1024)]
Ответ 3
Если вы хотите разделить текст между "страницами", вам необходимо использовать возможности классов NSLayoutManager
и NSTextContainer
. В принципе, вам нужно создать экземпляр NSTextContainer
для каждой страницы, которую вы хотите отобразить, с помощью инициализатора initWithSize:
. Затем вы регистрируете эти контейнеры с помощью -[NSLayoutManager addTextContainer:]
.
Вот соответствующая документация: https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/CustomTextProcessing/CustomTextProcessing.html#//apple_ref/doc/uid/TP40009542-CH4-SW35