Как вычислить высоту NSAttributedString с заданной шириной в iOS 6 [дубликат]


Возможные Дубликаты:
как получить высоту для NSAttributedString при фиксированной ширине

теперь NSAttributedString доступен в iOS 6. Для целей компоновки я хочу знать, как вычислить необходимую высоту NSAttributedString при фиксированной ширине. Я ищу что-то, что эквивалентно NSString это - (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size но для NSAttributedString.

чтобы рассчитать размер чертежа NSAttributedStrings, есть доступны два метода:

  1. - (CGSize)size не может быть использован, потому что он не принимает во внимание ширину.
  2. пробовал - (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options context:(NSStringDrawingContext *)context, но почему-то это не дает мне правильную высоту. Я думаю, что метод глючит. Если я запускаю следующий код, он дает мне bounding size: 572.324951, 19.000000 игнорируя заданную ширину 200. Он должен дать мне что-то вроде 100 высоты.
    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] init];
    NSDictionary *attributes = @{NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue" size:15], NSForegroundColorAttributeName : [UIColor blueColor]};
    [attributedString appendAttributedString:[[NSAttributedString alloc] initWithString:@"Attributed Stringn" attributes:attributes]];
    [attributedString appendAttributedString:[[NSAttributedString alloc] initWithString:@"Attributed Stringn" attributes:attributes]];
    [attributedString appendAttributedString:[[NSAttributedString alloc] initWithString:@"Attributed Stringn" attributes:attributes]];
    [attributedString appendAttributedString:[[NSAttributedString alloc] initWithString:@"Attributed Stringn" attributes:attributes]];
    [attributedString appendAttributedString:[[NSAttributedString alloc] initWithString:@"Attributed Stringn" attributes:attributes]];

    CGRect frame = [attributedString boundingRectWithSize:CGSizeMake(200, 1000) options:0 context:nil];
    NSLog(@"bounding size: %f, %f", frame.size.width, frame.size.height);

есть и другие методы, доступные для Mac OS X, но не для iOS.

1 56

1 ответ:

Вариант 2 работает в iOS с правильными параметрами.

NSAttributedString *attrStr = ... // your attributed string
CGFloat width = 300; // whatever your desired width is
CGRect rect = [attrStr boundingRectWithSize:CGSizeMake(width, 10000) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil];

без соответствующих значений для вы получите неверную высоту.

также требуется, чтобы attrStr содержит атрибут шрифта. Без шрифта, нет никакого способа, чтобы правильно рассчитать размер.