Подтвердить что ты не робот

Как настроить адаптивный многострочный текст 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. Что я делаю неправильно?

Мне нужно, чтобы текстовое содержимое было переменным.

4b9b3361

Ответ 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