Странное поведение при попытке выровнять вертикально текст UILabel - PullRequest
0 голосов
/ 04 февраля 2012

Я разрабатываю приложение для iPhone с последним SDK и XCode 4.2

Я использую этот код для выравнивания текста по вертикали, заданного ранее в UILabel. Вот код:

- (void)resizeLabel:(UILabel *)label
{
    CGSize maximumLabelSize = label.frame.size;

    CGSize expectedLabelSize = [label.text sizeWithFont:label.font 
                                      constrainedToSize:maximumLabelSize 
                                          lineBreakMode:label.lineBreakMode]; 

    //adjust the label the the new height.
    CGRect newFrame = label.frame;
    NSLog(@"NumLines: %d, OldWidth: %f, NewWidth: %f, OldHeight: %f, newHeight: %f", label.numberOfLines, maximumLabelSize.width,  expectedLabelSize.width, maximumLabelSize.height, expectedLabelSize.height);
    newFrame.size.height = expectedLabelSize.height;
    label.frame = newFrame;
}

Для текста: "Иглесия де ла Мерсед" Я получаю:

NumLines: 2, OldWidth: 205.000000, NewWidth: 153.000000, OldHeight: 39.000000, newHeight: 21.000000

Для текста: "Антигуо конвент де лос мердариос" Я получаю

NumLines: 2, OldWidth: 205.000000, NewWidth: 187.000000, OldHeight: 39.000000, newHeight: 42.000000


Обе настройки настроены на использование двух строк, но текст всегда отображается только в одну строку.

Почему я получаю двойную высоту, если expectedLabelSize.width меньше maximumLabelSize.width?

1 Ответ

1 голос
/ 04 февраля 2012

Я думаю, это перенос в две строки.

из документа :

Этот метод вычисляет метрики, необходимые для рисования указанной строки. Этот метод выкладывает текст получателя и пытается сделать он соответствует указанному размеру, используя указанный шрифт и разрыв строки опции. Во время размещения метод может разбить текст на несколько линии, чтобы он лучше подходил. Если текст получателя не полностью вписывается в указанный размер, выкладывает как можно больше текста насколько это возможно, и усекает его (только для макета) в соответствии с указанный режим разрыва строки. Затем он возвращает размер результирующая усеченная строка. Если высота указана в размере параметр меньше, чем одна строка текста, этот метод может вернуть значение высоты больше указанного.

Что упомянуть:
если вы установите для numberOfLines значение 0, оно будет автоматически использовать столько строк, сколько возможно и необходимо.

Также попробуйте:

myUILabel.numberOfLines = 0;
myUILabel.text = @"Antiguo convento de los merdarios";
[myUILabel sizeToFit];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...