TextKit的一些介绍在这里就不多说了,相关的信息可以看这里。这篇文章主要讲文本分页和遇到的问题。 TextKit中主要涉及的就三个类,实现分页也用到这是三个。
NSTextStorage
NSLayoutManager
NSTextContainer
主要的思路就是:
- NSTextStorage 存储要分段的文本信息
- NSTextStorage 设置 NSLayoutManager
- 在NSLayoutManager 中添加 NSTextContainer
- 获取NSTextContainer 显示的文本长度
- 返回分段信息
//TextKit 分页
+ (NSArray *)pagingwithContentString:(NSString *)contentString contentSize:(CGSize)contentSize textAttribute:(NSDictionary *)textAttribute {
NSMutableArray *pagingArray = [NSMutableArray array];
NSMutableAttributedString *orginAttString = [[NSMutableAttributedString alloc] initWithString:contentString attributes:textAttribute];
NSTextStorage *textStorage = [[NSTextStorage alloc] initWithAttributedString:orginAttString];
NSLayoutManager* layoutManager = [[NSLayoutManager alloc] init];
[textStorage addLayoutManager:layoutManager];
while (YES) {
NSTextContainer *textContainer = [[NSTextContainer alloc] initWithSize:contentSize];
[layoutManager addTextContainer:textContainer];
NSRange rang = [layoutManager glyphRangeForTextContainer:textContainer];
if (rang.length <= 0) {
break;
}
NSAttributedString *attStr =[textStorage attributedSubstringFromRange:rang];
[pagingArray addObject:attStr];
}
return pagingArray;
}
注意
由于系统的部分字体不支持中文,textAttribute 中指定的字体类型有可能跟输出内容的字体不一致,具体可以看Demo效果。
支持中文的系统字体
Heiti SC 黑体-简
Heiti TC 黑体-繁
PingFang TC 平方-简
PingFang HK 平方-繁
PingFang SC 平方-繁
简单的demo:demo地址