NSString sizeWithFont: constrainedToSize: возвращает неверную высоту на дисплеях Retina

Я думаю, что нашел крайний случай для sizeWithFont: constrainedToSize: где на дисплее Retina он иногда (кажется, что это основано на переносе слов) возвращает высоту на 1 строку выше, чем это действительно необходимо, и, что более важно, чем он на самом деле рисует.

ПРИМЕЧАНИЕ: реальный код, который я использую, похоронен внутри ориентированной на производительность переменной, нарисованной вручную код ячейки таблицы высот, поэтому я сократил проблему до как можно более простого примера кода. (Пожалуйста, обратите внимание на это, когда пытаетесь ответить на что-то другое, кроме моего вопроса: -)

Этот образец UIView заполняет его содержимое, измеряет текст, чтобы он поместился (обернутый), заполняет этот прямоугольник, затем рисует текст. на устройстве Retina (или симуляторе) высота возвращается на 1 строку выше, но на устройстве до сетчатки (или симуляторе) возвращается правильная высота.

Я был бы очень признателен за любую информацию, поскольку это ошибка, которую я хотел бы исправить!

Большое спасибо!

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

Весь простой проект доступен здесь .

Изображения симулятора:
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

7
задан eric 11 January 2011 в 20:46
поделиться