Учитывая NSAttriutedString, и я пытаюсь разбить его на несколько страниц и выполнить рендеринг следующим способом, но результат не идеален. Может ли кто-нибудь мне помочь?
Код нумерации страниц
//CoreText Pagination
+ (NSMutableArray *)coreTextPaging:(NSAttributedString *)str textFrame:(CGRect)textFrame{
NSMutableArray *pagingResult = [NSMutableArray array];
CFAttributedStringRef cfAttStr = (__bridge CFAttributedStringRef)str;
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(cfAttStr);
CGPathRef path = CGPathCreateWithRect(CGRectMake(textFrame.origin.x, textFrame.origin.y, textFrame.size.width, textFrame.size.height), NULL);
int textPos = 0;
NSUInteger strLength = [str length];
while (textPos < strLength) {
//设置路径
CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(textPos, 0), path, NULL);
//生成frame
CFRange frameRange = CTFrameGetVisibleStringRange(frame);
NSRange ra = NSMakeRange(frameRange.location, frameRange.length);
//获取范围并转换为NSRange,然后以NSAttributedString形式保存
[pagingResult addObject:[str attributedSubstringFromRange:ra]];
//移动当前文本位置
textPos += frameRange.length;
CFRelease(frame);
}
CGPathRelease(path);
CFRelease(framesetter);
return pagingResult;
}
Затем я помещаю одну из страниц в UITextView, используя следующий метод:
inset_content = UIEdgeInsetsMake(self.h_nav, 10, self.safeAreaInsetsBottom, 10);
textContainer = [[NSTextContainer alloc] initWithSize:self->size_content.size];
view_content = [[ARTextView alloc]initWithFrame:size_content textContainer:textContainer];
[view_content setTextContainerInset:inset_content];
[view_content.textStorage setAttributedString:[array_pages objectAtIndex:page_need_jump_to]];
Но результат не идеален, как в следующем: некоторые слова (недостаточно для одной строки) занимают всю строку, это очевиднонеправильно. кто-нибудь может помочь? Кстати, я использую семейство шрифтов SourceHanSerifCN-Regular и SourceHanSerifCN-Medium. неверный результат
Неправильный результат