Как настроить адаптивный многострочный текст UILabel?
У меня есть UILabel
с именем titleLabel
в моем наборе раскадровки, установленном по умолчанию. Я хочу, чтобы он программно расширялся по высоте, чтобы соответствовать ему. Вот что я пробовал до сих пор:
// just setting content
titleLabel.text = "You don't always know what you are getting with mass-market cloud computing services. But with SimpliCompute, the picture is clear. SimpliCompute gives you powerful virtual servers you can deploy using just your web browser. That’s enterprise grade technology you can deploy and control on-the-fly."
titleLabel.numberOfLines = 0
titleLabel.preferredMaxLayoutWidth = 700
titleLabel.lineBreakMode = NSLineBreakMode.ByWordWrapping
titleLabel.sizeToFit()
Ничто из этого не работает для меня в любой комбинации! Я всегда вижу только одну строку текста в UILabel
. Что я делаю неправильно?
Мне нужно, чтобы текстовое содержимое было переменным.
Ответы
Ответ 1
У меня вроде получилось, что все работает, добавляя ограничения автоматической компоновки:
![auto layout contraints]()
Но я не доволен этим. Взял много проб и ошибок и не мог понять, почему это сработало.
Также мне пришлось добавить, чтобы использовать titleLabel.numberOfLines = 0
в моем ViewController
Ответ 2
Это гораздо лучший подход, если вы ищете многострочную динамическую текстовую метку, которая точно занимает пространство на основе его текста.
Нет sizeToFit, preferredMaxLayoutWidth используется
Ниже описано, как это будет работать.
![введите описание изображения здесь]()
Позволяет настроить проект. Возьмите приложение Single View и в Storyboard Добавьте UILabel и UIButton. Определите ограничения для UILabel как снимок снизу:
![введите описание изображения здесь]()
Задайте свойства метки как показано ниже:
![введите описание изображения здесь]()
Добавьте ограничения в UIButton. Убедитесь, что вертикальное расстояние 100 находится между UILabel и UIButton
![введите описание изображения здесь]()
Теперь установите приоритет конечного ограничения UILabel как 749
![введите описание изображения здесь]()
Теперь установите свойства сжатия содержимого горизонтального содержимого и горизонтального содержимого UILabel как 750 и 748
![введите описание изображения здесь]()
Ниже мой класс контроллера. Вы должны подключить свойство UILabel и действие Button из раскадровки для просмотра класса контроллера.
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var textLabel: UILabel!
var count = 0
let items = ["jackson is not any more in this world", "Jonny jonny yes papa eating sugar no papa", "Ab", "What you do is what will happen to you despite of all measures taken to reverse the phenonmenon of the nature"]
@IBAction func updateLabelText(sender: UIButton) {
if count > 3 {
count = 0
}
textLabel.text = items[count]
count = count + 1
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
//self.textLabel.sizeToFit()
//self.textLabel.preferredMaxLayoutWidth = 500
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
Вот оно. Это автоматически изменит размер UILabel на основе его содержимого, а также вы увидите, что UIButton также настроен соответствующим образом.
Ответ 3
Он должен работать. Попробуйте это
var label:UILabel = UILabel(frame: CGRectMake(10
,100, 300, 40));
label.textAlignment = NSTextAlignment.Center;
label.numberOfLines = 0;
label.font = UIFont.systemFontOfSize(16.0);
label.text = "First label\nsecond line";
self.view.addSubview(label);
Ответ 4
Я знаю, что это немного устарело, но с тех пор, как я недавно просмотрел его:
let l = UILabel()
l.numberOfLines = 0
l.lineBreakMode = .ByWordWrapping
l.text = "BLAH BLAH BLAH BLAH BLAH"
l.frame.size.width = 300
l.sizeToFit()
Сначала установите для свойства numberOfLines значение 0, чтобы устройство понимало, что вам не важно, сколько строк ему нужно.
Затем укажите свой любимый BreakMode
Затем необходимо задать ширину перед методом sizeToFit(). Тогда метка знает, что она должна соответствовать указанной ширине
Ответ 5
С графическим интерфейсом пользователя (GUI) в XCode вы можете сделать следующее:
- Перейдите в "
Attribute Inspector
" и установите значение " Lines
в 0
. По умолчанию установлено значение 1
. - Текст метки может быть написан в несколько строк, нажав сочетание
option + return
.
![enter image description here]()
- Теперь, перейдите в раздел "
Size Inspector
" и установите width
, height
, X
и Y
position
метки.
![enter image description here]()
Все это.
Ответ 6
Программно, Swift
label.lineBreakMode = NSLineBreakMode.byWordWrapping
label.titleView.numberOfLines = 2