TextKit 實現文本分頁

TextKit的一些介紹在這裏就很少說了,相關的信息能夠看這裏。這篇文章主要講文本分頁和遇到的問題。 TextKit中主要涉及的就三個類,實現分頁也用到這是三個。html

NSTextStorage                
NSLayoutManager            
NSTextContainer              
複製代碼

主要的思路就是:git

  1. NSTextStorage 存儲要分段的文本信息
  2. NSTextStorage 設置 NSLayoutManager
  3. 在NSLayoutManager 中添加 NSTextContainer
  4. 獲取NSTextContainer 顯示的文本長度
  5. 返回分段信息
//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地址字體

相關文章
相關標籤/搜索