Как вычислить высоту NSAttributedString с заданной шириной в iOS 6
Возможный дубликат:
Как получить высоту для NSAttributedString с фиксированной шириной
Теперь NSAttributedString доступен в iOS 6. Для целей компоновки я хочу знать, как вычислить требуемую высоту NSAttributedString с фиксированной шириной. Я ищу что-то, что эквивалентно NSString - (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size
, но для NSAttributedString.
Чтобы вычислить размер чертежа NSAttributedStrings, доступны два метода:
-
- (CGSize)size
не может использоваться, потому что он не принимает во внимание ширину.
- Я пробовал
- (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 String\n" attributes:attributes]];
[attributedString appendAttributedString:[[NSAttributedString alloc] initWithString:@"Attributed String\n" attributes:attributes]];
[attributedString appendAttributedString:[[NSAttributedString alloc] initWithString:@"Attributed String\n" attributes:attributes]];
[attributedString appendAttributedString:[[NSAttributedString alloc] initWithString:@"Attributed String\n" attributes:attributes]];
[attributedString appendAttributedString:[[NSAttributedString alloc] initWithString:@"Attributed String\n" 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
Вариант 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];
Без правильных значений для параметра options
вы получите неправильную высоту.
Также требуется, чтобы attrStr
содержал атрибут шрифта. Без шрифта нет способа правильно рассчитать размер.