Как получить 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