Cómo calcular la altura de un NSAttributedString con un ancho dado en iOS 6 [duplicar]


Posible Duplicado:
Cómo obtener la altura para NSAttributedString a 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 bajo ancho fijo. Estoy buscando algo que es equivalente a NSString - (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size pero para NSAttributedString.

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

  1. - (CGSize)size no se puede usar porque no tiene en cuenta ningún ancho.
  2. Lo 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 corro el siguiente código, me da bounding size: 572.324951, 19.000000 ignorando el ancho dado de 200. Debería darme 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.

Author: Community, 2013-01-19

1 answers

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 options obtendrá la altura incorrecta.

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

 160
Author: rmaddy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-10 00:13:38