How do I get word wrap information with the new iOS 7 APIs?

后端 未结 2 1684
無奈伤痛
無奈伤痛 2020-12-01 17:48

I noticed that iOS 7 introduces new classes related to text layout such as NSLayoutManager, NSTextStorage, and NSTextContainer. How can I use these in order to get informati

2条回答
  •  一整个雨季
    2020-12-01 18:18

    Example:

    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]);
    }];
    

提交回复
热议问题