Можно ли уменьшить разрыв между текстом, если поместить его в несколько строк UILabel
? Мы можем установить рамку, размер шрифта и количество строк. Я хочу уменьшить разрыв между двумя строками на этом ярлыке.
objective-c
swift
xcode
uilabel
line-spacing
Abhinav
источник
источник
UILabel
, а затем вставьте все метки вStackView
. Наконец настроитьspacing
изStackView
. Не забудьте сложить их вертикально.Ответы:
Я думал добавить что-то новое к этому ответу, так что я не чувствую себя так плохо ... Вот ответ Swift :
«Краткий ответ: вы не можете. Чтобы изменить расстояние между строками текста, вам нужно будет создать подкласс UILabel и создать свой собственный drawTextInRect или создать несколько меток».Смотрите: Установка межстрочного интервала UILabel
Это действительно старый ответ, и другие уже добавили новый и лучший способ справиться с этим. Пожалуйста, ознакомьтесь с последними ответами, представленными ниже.источник
NSAttributedString
(также доступно в свойствах UILable в конструкторе интерфейса Xcode).NSParagraphStyle
при использованииNSAttributedString
. (Мне может потребоваться провести дополнительное тестирование других изменяемых свойств, ноlineSpacing
свойство позволяет только увеличить его.)В Xcode 6 вы можете сделать это в раскадровке:
источник
Начиная с iOS 6 вы можете установить атрибутивную строку для UILabel. Проверьте следующее:
источник
attributedString
Должно бытьNSMutableAttributedString
(не NSAttributedString)NSMutableAttributedString *attributedString = [NSMutableAttributedString alloc]initWithString:@"sample text"];
lineSpacing
СобственностьNSMutableParagraphStyle
никогда не бывает отрицательная, поэтому высота линии не может быть уменьшена с этим подходом. Чтобы ответить на вопрос, вы должны использовать другое свойство, см. @ D.ennis answer.Решения, изложенные здесь, не работают для меня. Я нашел немного другой способ сделать это с помощью iOS 6 NSAttributeString:
источник
Я сделал это простое расширение, которое очень хорошо работает для меня:
Скопируйте это в файл, так что вы можете использовать его следующим образом
источник
lineSpacing
и не забыть об установкеlineHeightMultiple
?.lineSpacing = 1.4
и забыть все о.lineHeightMultiple
...Из Интерфейсного Разработчика (Раскадровка / XIB):
Программный:
SWift 4
Использование расширения метки
Теперь вызовите функцию расширения
Или используя экземпляр метки (просто скопируйте и выполните этот код, чтобы увидеть результат)
Свифт 3
источник
В iOS 6 теперь есть альтернативный ответ, который заключается в том, чтобы установитьтрибуття на атрибуте, используя NSAttributedString с соответствующими стилями абзаца. Посмотрите этот ответ переполнения стека для деталей относительно высоты строки с NSAttributedString:
Основной текст - NSAttributedString высота строки сделано правильно?
источник
Вот класс, который подкласс UILabel имеет свойство высоты строки: https://github.com/LemonCake/MSLabel
источник
В Swift и как функция, вдохновленная DarkDust
источник
Согласно @Mike's Answer,
lineHeightMultiple
ключевым моментом является снижение . Пример ниже, он хорошо работает для меня:источник
SWIFT 3 полезное расширение для более удобного задания пространства между строками :)
источник
Я нашел способ, где вы можете установить реальную высоту строки (не фактор), и он даже отображает в реальном времени в Интерфейсном Разработчике . Просто следуйте инструкциям ниже. Код написан на Swift 4 .
Шаг № 1: Создайте файл с именем
DesignableLabel.swift
и вставьте следующий код:Шаг № 2: Поместите объект
UILabel
в раскадровку / XIB и установите для него классDesignableLabel
. Подождите, пока ваш проект для сборки (сборка должна быть успешной!).Шаг 3: Теперь вы должны увидеть новое свойство на панели свойств с именем «Высота строки». Просто установите значение, которое вам нравится, и вы должны увидеть результаты немедленно!
источник
Вот подкласс UILabel, который устанавливает
lineHeightMultiple
и гарантирует, что внутренняя высота достаточно велика, чтобы не обрезать текст.источник
В Swift 2.0 ...
Добавить расширение:
Теперь просто установите свой UILabel как attribuText:
Очевидно, я добавил кучу параметров, которые вам могут не понадобиться. Поиграйте - не стесняйтесь переписать метод - я искал это на куче разных ответов, так что подумал, что выложу все расширение на случай, если оно кому-нибудь поможет ...
источник
Swift3 - в расширении UITextView или UILabel добавьте эту функцию:
Я добавил некоторый код для сохранения текущего атрибутивного текста, если вы уже используете атрибутивные строки с представлением (вместо того, чтобы перезаписывать их).
источник
Другой ответ ... Если вы передаете строку программно, вам нужно передать приписанную строку вместо обычной строки и изменить ее стиль. (IOS10)
источник
Расширение Swift 3:
источник
Это должно помочь с этим. Затем вы можете назначить свой ярлык этому пользовательскому классу в раскадровке и использовать его параметры непосредственно в свойствах:
источник
Расширение Swift 4 label. Создание NSMutableAttributedString перед передачей в функцию в случае, если для приписанного текста требуются дополнительные атрибуты.
источник
Этот код работал для меня (ios 7 и ios 8 наверняка).
источник
Вот мое решение в быстрой. Подкласс должен работать как для атрибута attributeText и text, так и для characterSpacing + lineSpacing. Он сохраняет интервал, если установлена новая строка или attributeString.
источник
Как быстро-грязный-умный-простой обходной путь:
Для UILabels, у которых мало строк, вы можете вместо этого использовать stackViews.
Spacing
StackView на нужное вам количество.Обязательно сложите их вертикально . Это решение также работает для пользовательских шрифтов.
источник