Сейчас я настраиваю свои старые приложения на iPhone 4 с помощью симулятора, и я могу столкнуться с очень странным поведением с помощью рисования UILabel и sizeWithFont: constrainedToSize: которые я в настоящее время вижу только на симуляторе iPhone 4.
Я пытаюсь показать пользователю следующий текст ошибки: @ "Неверное имя пользователя или пароль". Этот текст находится в динамическом окне ошибок, которое состоит из трех частей: верхней, центральной и нижней, и поэтому я вычисляю размерпометить, чтобы я мог соответствующим образом изменить центральную рамку фонового изображения.
Вот пример кода вычисления размера UILabel:
CGRect errorFrame = CGRectMake(40, 0, 240.0, 22.0);
UILabel *errorlabel = [[UILabel alloc] initWithFrame:errorFrame];
errorlabel.adjustsFontSizeToFitWidth = NO;
errorlabel.font = [UIFont fontWithName:@"HelveticaNeue" size:16];
errorlabel.textAlignment = UITextAlignmentLeft;
errorlabel.numberOfLines = 0;
errorlabel.text = @"Incorrect user name or password";
// since only the width is fixed I will use a really large height value
CGSize errorLabelSize = [errorlabel.text sizeWithFont:errorlabel.font constrainedToSize:CGSizeMake(240.0, 4600.0)];
CGRect newFrame = errorlabel.frame;
newFrame.size.height = errorLabelSize.height;
errorlabel.frame = newFrame;
// added so I can easily see the new frame
errorlabel.backgroundColor = [UIColor redColor];
[self.errorView addSubview:errorlabel];
[errorlabel release];
Когда я запускаю код на симуляторе iPhone 3, sizeWithFont: constrainedToSize: метод возвращает высоту в 1 строку и выводит этот текст ошибки в 1 строку.Когда я запускаю тот же код на симуляторе iPhone 4, sizeWithFont: constrainedToSize: возвращает размер (170.0, 42.0), который необходим для двух строк, но сама метка рисуется на 1 строке.Как будто код sizeWithFont не использует ту же логику кода рендеринга.
Поскольку изменение текста ошибки не вариант :) есть идеи, как обойти эту проблему или решить ее?
Спасибо заранее