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