iOS6 uilabel не выравнивается по центру текста

Я работаю над минимальным ios-приложением ios 5, и я только что столкнулся с странной проблемой с uilabels. или может, я упускаю что-то очевидное. в любом случае проблема в том, что у меня есть uilabel, который должен быть выровнен по центру текста. все отлично работает на ios 5, но на ios 6 он всегда выровнен по левому краю. Я видел, что старый способ выравнивания текста uilabel устарел,и эта настройка должна работать.

self.topComment.textAlignment = NSTextAlignmentCenter;

но даже таким образом он все еще только выровнен по центру на ios 5 и левый выровнен по ios 6. У меня есть код, который изменяет размер шрифта текста в метке, чтобы он соответствовал минимальному и максимальному размеру.

UIFont *font = self.topComment.font;

for(int i = maxFont; i > minFont; i--)
{
    // Set the new font size.
    font = [font fontWithSize:i];
    CGSize constraintSize = CGSizeMake(self.topComment.frame.size.width, 1000);
    CGSize labelSize = [topString sizeWithFont:font constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];
    if(labelSize.height <= self.topComment.frame.size.height ) {
        fits = YES;
        break;
    }
    //self.topComment.text = topString;

}


self.topComment.font = font;
self.topComment.text = topString;

Так что это единственное, что я делаю с меткой, но она всегда остается выровненной в ios 6. Важно отметить, что если я упаду в uilabel с текстом и центром выровнять его и не использовать приведенный выше код, то он сосредоточен на ios 5 и 6.

2 ответов


Ok похоже, что включение затянуть интервал между буквами имеет другой результат на ios 5 и 6. Я честно не могу объяснить, почему разница, но просто выключение этого дает желаемое центрирование ярлыков для меня. Просто оставляю это здесь в качестве ответа на случай, если кто-то еще сделает ту же глупую ошибку.

например:

    lbl.adjustsLetterSpacingToFitWidth = NO;

обратите внимание, что это устарело в iOS 7.0.


для iOS 6 или более поздней версии:

label.textAlignment = NSTextAlignmentLeft;