NSLayoutManager
有可能对你有用的方法:enumerateLineFragmentsForGlyphRange:usingBlock:
。借助它,您可以枚举每行文本,在textContainer中获取它的大小和文本范围。所以,你需要的只是从你的属性字符串中实例化NSTextStorage
。然后,实例化NSTextContainer
与期望的大小(以你的情况 - CGSizeMake(self.view.frame.width, CGFLOAT_MAX)
再用线所有的东西,并开始枚举 事情是这样的:。
NSTextStorage *textStorage = [[NSTextStorage alloc] initWithAttributedString:attrString];
NSTextContainer *textContainer = [[NSTextContainer alloc] initWithSize:CGSizeMake(self.view.frame.width, CGFLOAT_MAX)];
NSLayoutManager *layoutManager = [NSLayoutManager new];
[layoutManager addTextContainer:textContainer];
[textStorage addLayoutManager:layoutManager];
NSRange allRange = NSMakeRange(0, textStorage.length);
//force layout calculation
[layoutManager ensureLayoutForTextContainer:textContainer];
[layoutManager enumerateLineFragmentsForGlyphRange:allRange usingBlock:^(CGRect rect, CGRect usedRect, NSTextContainer * _Nonnull textContainer, NSRange glyphRange, BOOL * _Nonnull stop) {
//here you can do anything with the info: bounds of text, text range, line number etc
}];
@ Daij-Djan我必须动态地更改字体大小,行间距和其他属性我认为使用表格单元格有一个限制使用我的案例 – Paul 2013-03-03 12:16:12
当然 - 我不建议在这里所有的tableview - 从截图我认为你DID使用表格 – 2013-03-04 08:34:24