UILabel неверный размер расчетов на iPhone - PullRequest
1 голос
/ 23 августа 2010

Сейчас я настраиваю свои старые приложения на 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 не использует ту же логику кода рендеринга.

Поскольку изменение текста ошибки не вариант :) есть идеи, как обойти эту проблему или решить ее?

Спасибо заранее

Ответы [ 3 ]

0 голосов
/ 18 января 2011

Я заметил эту проблему.Также заметил, что при использовании iPhone 4 пустое пространство, включенное в строку текста, рассчитывается как ширина 4 точки, но если вы рассчитываете ширину пустого пространства само по себе, оно рассчитывается как ширина 5 пунктов .... (с использованием ArialMT, 14pt)

0 голосов
/ 25 июля 2011

После отправки этой ошибки в Apple около года назад я получил от них электронное письмо, в котором говорилось, что проблема должна быть решена на iOS5 бета 1

0 голосов
/ 25 августа 2010

У меня такая же проблема, с тем же шрифтом.Я не нашел способа предсказать, когда это произойдет, и кажется, что он никогда не бывает более чем на одну строку большеЭто происходит на устройстве точно так же, как на симуляторе.Это происходит во всех iOS 4.0, 4.0.1 и 4.0.2.Я еще не проверял симулятор 4.1.

В конце концов я обошел вокруг, вручную отметив места, где это произошло, и вычтя одну высоту линии в этих местах.При обновлении до 4.1 мы проверим, сохранилось ли это поведение.

...