ios nsattributedstring bounding-box

Cómo calcular la altura de un NSAttributedString con un ancho determinado en iOS 6



bounding-box (1)

La opción 2 funciona en iOS con los parámetros adecuados.

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

Sin los valores adecuados para el parámetro de options obtendrá la altura incorrecta.

También se requiere que attrStr contenga un atributo de fuente. Sin una fuente, no hay forma de calcular correctamente el tamaño.

Posible duplicado:
Cómo obtener la altura para NSAttributedString en un ancho fijo

Ahora NSAttributedString está disponible en iOS 6. Para propósitos de diseño, quiero saber cómo calcular la altura requerida de un NSAttributedString en ancho fijo. Estoy buscando algo que sea equivalente a NSString''s - (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size but for NSAttributedString.

Para calcular el tamaño de dibujo de NSAttributedStrings, hay dos métodos disponibles:

  1. - (CGSize)size no se puede usar porque no tiene en cuenta ningún ancho.
  2. Intenté - (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options context:(NSStringDrawingContext *)context , pero de alguna manera no me da la altura correcta. Creo que el método es defectuoso. Si ejecuto el siguiente código, me da un bounding size: 572.324951, 19.000000 ignorando el ancho dado de 200. Me debería dar algo así como 100 de altura.

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

Hay otros métodos disponibles para Mac OS X, pero no para iOS.