如何设置自适应多行UILabel文本?

我的故事板笔尖中有一个名为titleLabelUILabel设置为其默认高度。 我希望它在编程上扩展高度以适应其内容。 这是我迄今为止所尝试的:

 // 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一行文字。 我究竟做错了什么?

我绝对需要的文字内容是可变的。

我通过添加自动布局约束得到的东西工作:

自动布局限制

但是我对此并不满意。 花了很多的试验和错误,不明白为什么这个工作。

此外,我不得不添加使用titleLabel.numberOfLines = 0在我的ViewController

它应该工作。 尝试这个

 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); 

这是更好的方法,如果你正在寻找多行dynamic文本标签,正是基于其文本的空间。

没有sizeToFit,preferredMaxLayoutWidth使用

下面是它将如何工作。

在这里输入图像说明

让我们build立这个项目。 以单视图应用程序和故事板中添加一个UILabel和一个UIButton。 定义UILabel的约束如下所示:

在这里输入图像说明

设置标签属性如下图:

在这里输入图像说明

将约束添加到UIButton。 确保100的垂直间距在UILabel和UIButton之间

在这里输入图像说明

现在将UILabel的尾随约束的优先级设置为749

在这里输入图像说明

现在将UILabel的Horizo​​ntal Content Hugging和Horizo​​ntal Content Compression属性设置为750和748

在这里输入图像说明

以下是我的控制器类。 您必须将UILabel属性和Button动作从storyboard连接到viewcontroller类。

 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也相应地进行了调整。

我知道这有点旧了,但是最近我看了一下:

 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,以便设备理解你不关心它需要多less行。 然后指定你最喜欢的BreakMode然后宽度需要在sizeToFit()方法之前设置。 然后标签知道它必须符合指定的宽度