Я думаю, что я нашел краевой кейс для sizeWithFont: constrainedToSize: где на экране сетчатки он иногда (кажется, основан на переносе слов) возвращает высоту 1 строку выше, чем на самом деле необходимо, и что более важно, чем это на самом деле рисует.NSString sizeWithFont: constrainedToSize: возврат неправильной высоты на дисплеях сетчатки
ПРИМЕЧАНИЕ. Настоящий код, который я использую, зарывается внутри стандартного векторного кода таблицы высоты таблицы с вертикальной ориентацией, поэтому я довел вопрос до максимально простого кода примера. (Пожалуйста, обратите внимание на это, когда вы пытаетесь ответить на что-то другое, чем мой вопрос :-)
Этот образец UIView заполняет его содержимое, измеряет текст в соответствии с (завернутым), заполняет его, затем рисует текст.
На устройстве сетчатки (или симуляторе) высота возвращается на 1 линию слишком высоко, но на устройстве с предварительной сеткой (или симуляторе) она возвращает правильную высоту.
Я был бы очень признателен за любое понимание, которое может иметь любой, поскольку это ошибка, которую я хотел бы исправить!
Большое спасибо!
-Эрик
- (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];
}
Весь простой проект доступен here.
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
жестким, верно? Может кто-нибудь помочь? Значок Tumbleweed не был супер забавой, чтобы заработать! – eric
После запуска вашего образца проекта, я считаю, что это был симулятор или ошибка SDK, да, у него нет проблем на Xcode 4 с iOS 4.3. – cxa
Спасибо xan. Теперь он функционирует так, как должен, в текущем Xcode/iOS. – eric