如何使用新的iOS 7 API获取自动换行信息?
我注意到iOS 7引入了与文本布局相关的新类,如NSLayoutManager,NSTextStorage和NSTextContainer。 我怎样才能使用这些为了获得有关在NSString上换行的信息?
例如,说我有一个很长的NSString,我把它放在一个UILabel。 如果我在UILabel上启用多行,它会产生一个如下所示的string:
The quick brown fox jumps over the lazy dog.
这很好,但我不能访问代码中的换行符(例如jumps
后,我希望它返回\n
或类似的东西)。 我想知道哪些字符索引断行发生。 我知道我们可以用CoreText做到这一点 ,但是因为我们在iOS 7中有这些新类,所以我想知道如何使用它们。
例:
CGFloat maxWidth = 150; NSAttributedString *s = [[NSAttributedString alloc] initWithString:@"The quick brown fox jumped over the lazy dog." attributes:@{NSFontAttributeName:[UIFont fontWithName:@"GillSans" size:20]}]; NSTextContainer* tc = [[NSTextContainer alloc] initWithSize:CGSizeMake(maxWidth,CGFLOAT_MAX)]; NSLayoutManager* lm = [NSLayoutManager new]; NSTextStorage* tm = [[NSTextStorage alloc] initWithAttributedString:s]; [tm addLayoutManager:lm]; [lm addTextContainer:tc]; [lm enumerateLineFragmentsForGlyphRange:NSMakeRange(0,lm.numberOfGlyphs) usingBlock:^(CGRect rect, CGRect usedRect, NSTextContainer *textContainer, NSRange glyphRange, BOOL *stop) { NSRange r = [lm characterRangeForGlyphRange:glyphRange actualGlyphRange:nil]; NSLog(@"%@", [s.string substringWithRange:r]); }];