У меня есть эта странная проблема, и я занимаюсь этим уже более 8 часов. В зависимости от ситуации мне приходится вычислять UILabels
размер динамически,
например,
я получаю UIViewController
событие и меняю UILabels
размер. от большего к меньшему. Размер моего UILabel
становится меньше, и я получаю правильный необходимый размер, но текст в моем UILabel
остается прежним, тот же размер шрифта и т. Д. Мне нужно, чтобы шрифт стал меньше, чтобы весь текст соответствовал размеру UILabel
. Итак, вопрос в том, как сделать так, чтобы текст соответствовал моей этикетке autoshrinking
или что-то в этом роде?
В моем xib
, UILabels
autoshrink
проверяются, а также количество строк устанавливаются в 0, а также моей строке имеет новые символы строки (\ п), и я выбрал linebreakmode к wordwrap
. Может быть, кто-нибудь был в той же ситуации, что и я, и мог бы мне помочь? Я был бы очень признателен за это.
Заранее спасибо!
РЕДАКТИРОВАТЬ: UILabel
минимальный размер шрифта установлен на 10
источник
Ответы:
Если вы все еще ищете лучшее решение, я думаю, это то, что вам нужно:
Логическое значение, указывающее, следует ли уменьшить размер шрифта, чтобы строка заголовка поместилась в ограничивающий прямоугольник метки (это свойство действует, только если для
numberOfLines
свойства установлено значение 1).При установке этого свойства
minimumScaleFactor
НЕОБХОДИМО также установить это свойство (хорошее значение по умолчанию - 0,5).стриж
Objective-C
Логическое значение, указывающее, следует ли отрегулировать интервал между буквами, чтобы он соответствовал строке в пределах прямоугольника границ метки.
стриж
Objective-C
Источник .
источник
minimumFontSize
что в iOS 6.0 не рекомендуется.minimumScaleFactor
Вместо этого используйте .Вот как я получаю
Autoshrink
работу UILabel (особенно для установки высоты шрифта метки в устройстве 4s из 6s Plus Storyboard) в iOS 9.2, Xcode 7.2 ...источник
minimumFontSize
устарела в iOS 6.Так что используйте
minimumScaleFactor
вместоminmimumFontSize
.Swift 5
источник
также мое решение - это логическая метка. adjustsFontSizeToFitWidth = YES; НО. Вы должны в Интерфейсном Разработчике переключить Перенос слов в положение « CLIP ». Затем автоматически усадите этикетки. Это очень важно.
источник
В Swift 3 (программно) мне пришлось сделать это:
источник
Вы можете написать как
Вы можете рассчитать количество таких строк
Надеюсь, это поможет вам :-) жду вашего ответа
источник
Ну, в конце концов, я не нашел своего ответа. И я думаю, что автоматическое сжатие не работает для нескольких строк. В итоге я использовал предложение в этой ссылке: автоматическое сжатие на UILabel с несколькими строками
Решение состоит в том, чтобы вычислить высоту текста при заданной ширине, а если текст больше, уменьшить размер шрифта, а затем сделать то же самое снова, пока высота не станет равной или меньше вашего необходимого размера.
Я не понимаю, почему это должно быть так сложно реализовать. Если я чего-то упускаю, все могут меня поправить :)
источник
Это для Swift 3 под управлением Xcode 8.2.1 (8C1002)
Лучшее решение, которое я нашел, - установить фиксированную ширину в раскадровке или IB на этикетке. Установите ограничения с помощью ограничения на поля. В вашем viewDidLoad добавьте следующие строки кода:
Это сработало как шарм, и оно не выходит за рамки новой строки и не сжимает текст до ширины метки без каких-либо странных проблем и работает в Swift 3.
источник
Это отличный вопрос, потому что кажется, что к настоящему времени это будет частью встроенной
UIKit
функции или связанной структуры. Вот хороший наглядный пример вопроса:Нет простого способа обойти это, но это определенно возможно. Один из способов сделать это - программно попробовать разные размеры шрифтов, пока не найдете тот, который достаточно близко подходит к границам представления. Вы можете сделать это с помощью
boundingRect()
функцииNSString
илиNSAttributedString
. Например:Вы можете сделать бинарный поиск более эффективным, чем метод полного перебора. Если вы ищете что-то действительно надежное, есть также некоторые соображения, которые немного сложнее, включая правильный перенос слов и производительность кеширования шрифтов iOS.
Если вас интересует только отображение текста на экране простым способом, я разработал надежную реализацию в Swift, которую также использую в производственном приложении. Это
UIView
подкласс с эффективным автоматическим масштабированием шрифта для любого вводимого текста, включая несколько строк. Чтобы использовать это, вы просто сделаете что-то вроде:Это оно! Вы можете найти полный источник здесь: https://github.com/FlickType/AccessibilityKit
Надеюсь это поможет!
источник
В iOS 9 мне просто нужно было:
Кто-то рекомендовал установить количество строк на 0, но для меня это просто заставило метку перейти на несколько строк ...
источник
UILabel
и «a»UITextField
в статической ячейке и нажал «Устранить проблемы с автоматическим расположением» и «Добавить отсутствующие ограничения». Все выровнялось, но Autoshrink нужно было знать расстояние до метки, для которого функция «Добавить отсутствующие ограничения» не добавляла ограничения.Я думаю, вы можете написать следующий код после выделения init Label
Он отлично работает со мной Используйте его
источник
Два года прошло, а эта проблема все еще актуальна ...
В iOS 8 / XCode 6.1 я иногда обнаруживал, что my
UILabel
(созданный в aUITableViewCell
, с включенным AutoLayout и гибкими ограничениями, чтобы в нем было много места) не изменял свой размер, чтобы соответствовать текстовой строке.Решение, как и в предыдущие годы, заключалось в том, чтобы установить текст, а затем позвонить
sizeToFit
.(Вздох.)
источник
Вот как это сделать. Предположим, что следующая метка messageLabel - это метка, с которой вы хотите добиться желаемого эффекта. Теперь попробуйте эту простую строку кода:
источник
не работает, если
numberOfLines > 1
То, что я сделал, поставило такое условие -источник
Я опаздываю на вечеринку, но, поскольку у меня было дополнительное требование - по одному слову в строке, это одно добавление помогло мне:
label.numberOfLines = [labelString componentsSeparatedByString:@" "].count;
Документы Apple говорят:
Но это ложь. Я говорю вам ложь! Это верно для всех версий iOS. В частности, это верно при использовании
UILabel
внутри a,UICollectionViewCell
размер которого определяется ограничениями, динамически регулируемыми во время выполнения с помощью настраиваемого макета (напримерself.menuCollectionViewLayout.itemSize = size
).Поэтому при использовании в сочетании с
adjustsFontSizeToFitWidth
иminimumScaleFactor
, как упоминалось в предыдущих ответах, программная настройкаnumberOfLines
на основе количества слов решила проблему автоматического сжатия. Выполнение чего-то подобного на основе количества слов или даже количества символов может дать "достаточно близкое" решение.источник
В Swift 4 (программно):
источник
Swift 4, Xcode 9.4.1
Решение, которое сработало для меня: у меня была метка в ячейке представления коллекции , и текст метки обрезался. Установите атрибуты, как показано ниже, на раскадровке
источник