TextKit的一些介紹在這裏就很少說了,相關的信息能夠看這裏。這篇文章主要講文本分頁和遇到的問題。 TextKit中主要涉及的就三個類,實現分頁也用到這是三個。html
NSTextStorage
NSLayoutManager
NSTextContainer
複製代碼
主要的思路就是:git
//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效果。github
支持中文的系統字體bash
Heiti SC 黑體-簡
Heiti TC 黑體-繁
PingFang TC 平方-簡
PingFang HK 平方-繁
PingFang SC 平方-繁
複製代碼
簡單的demo:demo地址字體