如何从CGSIZE获取NSAttributedString用于UITextView?

时间:2015-04-15 07:51:12

标签: ios objective-c uitextview nsattributedstring

我正在使用UITextViewNSAttributedString创建一个阅读器应用,我需要将整个attributedString分成少量的属性字符串以启用Pages Concept。

我有计算给定属性字符串的帧大小的方法。

        CGRect rect = [attrString boundingRectWithSize:CGSizeMake(768, 10000) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil];

但我需要获取(768,1024)ContentSize的attributeString。

我已经使用了这个,但是attributesStrings没有被正确划分,因为它包含NSTextAttachmentHTML蜇伤。

CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)delegate.attributedString);

我该如何计算?它需要很快,需要占用少量内存。

3 个答案:

答案 0 :(得分:7)

如果你想知道UITextView的大小,你不应该问文本的边界矩形,因为它不是视图的大小。 UITextView包含填充,您需要考虑到这一点 最简单的方法是在添加文本后立即在文本视图上调用sizeToFit。稍后只需要UItextView框架。

答案 1 :(得分:2)

您可以使用UITextView函数sizeThatFits:

[textView sizeThatFits:CGSizeMake(768, 1024)]

答案 2 :(得分:2)

如果要在“页面”之间拆分文本,则需要使用NSLayoutManagerNSTextContainer类的功能。基本上,您需要使用NSTextContainer初始值设定项为您希望显示的每个页面创建一个initWithSize:实例。然后使用-[NSLayoutManager addTextContainer:]注册这些容器。

以下是相关文档:https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/CustomTextProcessing/CustomTextProcessing.html#//apple_ref/doc/uid/TP40009542-CH4-SW35