В настоящее время у меня есть UILabel
:
factLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 100, 280, 100)];
factLabel.text = @"some text some text some text some text";
factLabel.backgroundColor = [UIColor clearColor];
factLabel.lineBreakMode = UILineBreakModeWordWrap;
factLabel.numberOfLines = 10;
[self.view addSubview:factLabel];
На протяжении всей жизни моего iOS-приложения, factLabel
получается куча разных ценностей. Некоторые с несколькими предложениями, другие только с 5 или 6 словами.
Как настроить UILabel
так, чтобы размер шрифта изменялся так, чтобы текст всегда соответствовал границам, которые я определил?
ios
objective-c
fonts
uilabel
CodeGuy
источник
источник
Ответы:
Одна линия:
Приведенный выше код будет корректировать размер шрифта вашего текста до (например),
8
пытаясь вписать ваш текст в метку.numberOfLines = 1
является обязательным.Несколько строк:
Ибо
numberOfLines > 1
есть метод для определения размера конечного текста с помощью методов добавления NSString sizeWithFont: ... UIKit , например:После этого вы можете просто изменить размер вашей метки
lLabelSize
, например, используя result (при условии, что вы измените только высоту метки):iOS6
Одна линия:
Начиная с iOS6,
minimumFontSize
устарела. Линияможно изменить на:
IOS 7
Несколько строк:
Начиная с iOS7,
sizeWithFont
становится устаревшим. Многострочный регистр сводится к:iOS 13 (Swift 5):
источник
sizeWithFont:constrainedToSize:lineBreakMode:
но этот путь немного сложенmyLabel.minimumScaleFactor:10.0/[UIFont labelFontSize];
minimumFontSize
устарела с iOS 6. Вы можете использоватьminimumScaleFactor
.Это позаботится о размере шрифта в соответствии с шириной метки и текста.
источник
adjustsFontSizeToFitWidth
сокращает текст, только если он не помещается в контейнереНа основе ответа @Eyal Ben Dov вы можете создать категорию, чтобы сделать ее гибкой для использования в других ваших приложениях.
Обс .: я обновил его код, чтобы сделать его совместимым с iOS 7
Заголовочный файл
-Информационный файл
-Использование
ура
источник
setNeedsLayout
/,layoutIfNeeded
если вы используете AutoLayout).Одна строка - Есть два способа, которые вы можете просто изменить.
1- Прагматично (Свифт 3)
Просто добавьте следующий код
2 - Использование инспектора атрибутов UILabel
источник
Это 2015 год. Мне нужно было найти пост в блоге, где объяснялось бы, как это сделать для последней версии iOS и XCode с Swift, чтобы он работал с несколькими строками.
Источник: http://beckyhansmeyer.com/2015/04/09/autoshrinking-text-in-a-multiline-uilabel/
источник
Swift версия:
источник
Вот расширение Swift для UILabel. Он запускает алгоритм двоичного поиска, чтобы изменить размер шрифта на основе ширины и высоты границ метки. Протестировано для работы с iOS 9 и автопрокладкой.
ИСПОЛЬЗОВАНИЕ: Где
<label>
ваша предопределенная UILabel, которая требует изменения размера шрифтаПо умолчанию эта функция выполняет поиск в диапазоне размеров шрифта 5pt и 300pt и устанавливает шрифт так, чтобы его текст «идеально» соответствовал границам (с точностью до 1.0pt). Вы можете определить параметры так, чтобы он, например, выполнял точный поиск между 1pt и текущим размером шрифта метки в пределах 0.1pt следующим образом:
Скопируйте / вставьте следующий код в ваш файл
ПРИМЕЧАНИЕ. Каждый из
layoutIfNeeded()
вызовов можно удалить по своему усмотрению.источник
Это немного не сложно, но это должно сработать, например, допустим, вы хотите ограничить вашу uilabel до 120x120, с максимальным размером шрифта 28:
источник
Просто отправьте сообщение sizeToFit в UITextView. Он будет регулировать свою собственную высоту, чтобы просто соответствовать ее тексту. Он не изменит свою ширину или происхождение.
источник
sizeToFit
выtextViewA1
наберете 200 очков, вы получите обрезку.Версия Swift 2.0:
источник
Это решение работает для мультилинии:
Прочитав несколько статей и потребовав функцию, которая автоматически масштабировала бы текст и корректировала количество строк, чтобы наилучшим образом соответствовать заданному размеру метки, я сам написал функцию. (т. е. короткая строка прекрасно помещалась бы на одной строке и использовала бы большую часть рамки метки, тогда как длинная сильная сторона автоматически разбивалась на 2 или 3 строки и соответственно изменяла размер)
Не стесняйтесь повторно использовать это и настроить как требуется. Убедитесь, что вы вызываете его после
viewDidLayoutSubviews
завершения, чтобы был установлен начальный кадр метки.источник
Вот код заполнения подкласса UILabel, который реализует изменение размера анимированного шрифта:
источник