Определить размер шрифта после автоусадки

У меня есть 2 UILabels для приложения учета (дома и в гостях). Пользователь может нажать "Домой" или "Вне" и изменить ярлык на любой, какой ему нравится. Это все работает нормально. Когда пользователь вводит имя, превышающее размер метки, он сжимает шрифт до нужного размера. Это делает 2 метки больше не совпадают по размеру шрифта, и выглядит неправильно. Мой вопрос: Как вы можете установить размер шрифта одной метки равным размеру другой метки, которая была "autoshrunk"?

Я также понимаю, что мне нужно написать код, чтобы определить, какой размер шрифта меньше между двумя метками, и установить для них обоих это число. Я не думаю, что у меня будут проблемы с этим, пока я получу ответ на вышеупомянутый вопрос. Кажется, это должно быть просто, но до сих пор это ускользало от меня.

2 ответа

Решение

Поэтому я надеюсь, что вы знаете размер рамки обеих этикеток.

Используйте - sizeWithFont: minFontSize: actualFontSize: forWidth: lineBreakMode: найти минимальный размер шрифта, который он будет использовать.

Если у вас есть какие-либо сомнения, пожалуйста, дайте мне знать.

Для меня это работало нормально:

- (CGFloat)actualTitleFontSize
{
    NSStringDrawingContext *labelContext = [NSStringDrawingContext new];
    labelContext.minimumScaleFactor = 0.2;

    NSAttributedString *attributedString =
        [[NSAttributedString alloc] initWithString:label.text attributes:@{NSFontAttributeName : label.font}];
    [attributedString boundingRectWithSize:label.frame.size
                                   options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
                                   context:labelContext];

    CGFloat actualFontSize = label.font.pointSize * labelContext.actualScaleFactor;

    return actualFontSize;
}
Другие вопросы по тегам