Creo que he encontrado una caja de borde para sizeWithFont: constrainedToSize: donde, en una pantalla de retina, a veces (parece basarse en el ajuste de palabra) devuelve una altura de 1 línea más alto de lo que realmente se necesita, y más importante aún de lo que realmente se dibuja.NSString sizeWithFont: constrainedToSize: devolver la altura incorrecta en retina muestra
NOTA: El código real que estoy utilizando está oculto dentro del código de celda de vista de tabla de altura variable dibujado a mano céntrico, así que he reducido el problema a un código de muestra tan simple como sea posible. (Por favor, tome nota de esto cuando intente responder algo que no sea mi pregunta :-)
Esta muestra UIView llena su contenido, mide el texto para ajustar (envuelto), rellena el rect y luego dibuja el texto.
En un dispositivo de retina (o simulador) la altura se devuelve 1 línea demasiado alta, pero en un dispositivo prerretina (o simulador) devuelve la altura correcta.
Agradecería mucho cualquier comentario que alguien pueda tener, ¡ya que es un error que me gustaría solucionar!
¡Muchísimas gracias!
-Eric
- (void)drawRect:(CGRect)rect {
NSString * theString = @"Lorem ipsum dolor sit ameyyet, consectetur adipiscing elit. Etiam vel justo leo. Curabitur porta, elit vel.";
UIFont * theFont = [UIFont systemFontOfSize:12];
CGSize theConstraint = CGSizeMake(rect.size.width - 20, rect.size.height - 20);
CGSize theResultSize = [theString sizeWithFont:theFont constrainedToSize:theConstraint];
// dump the measurements
NSLog(@"returned a size h = %f, w = %f", theResultSize.height, theResultSize.width);
// fill the whole rect
CGContextRef context = UIGraphicsGetCurrentContext();
[[UIColor yellowColor] set];
CGContextFillRect(context, rect);
// fill the measured rect
CGRect theRect = CGRectMake(10, 10, theResultSize.width, theResultSize.height);
context = UIGraphicsGetCurrentContext();
[[UIColor cyanColor] set];
CGContextFillRect(context, theRect);
// draw the text
[[UIColor blackColor] set];
[theString drawInRect:theRect withFont:theFont];
}
El proyecto simple conjunto está disponible here.
Imágenes Simulator:
http://files.droplr.com/files/9979822/aLDJ.Screen%20shot%202011-01-11%20at%2012%3A34%3A34.png http://files.droplr.com/files/9979822/YpCM.Screen%20shot%202011-01-11%20at%2012%3A36%3A47.png
una pregunta difícil, ¿verdad? ¿Alguien puede ayudar? ¡La insignia Tumbleweed no fue muy divertida de ganar! – eric
Después de ejecutar su proyecto de muestra, creo que fue un simulador o error de SDK, sí, no tiene ningún problema en el Xcode 4 con iOS 4.3. – cxa
Gracias xan. Ahora está funcionando como debería en el actual Xcode/iOS – eric