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:
-
- (CGSize)size
no se puede usar porque no tiene en cuenta ningún ancho. - 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 unbounding 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.