Определить размер шрифта после автоусадки
У меня есть 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;
}