2016-11-16 58 views
0

我想显示一个UILabel,可能会占用多行,但我在调整高度方面存在问题。如何防止UILabel填满整个屏幕?

这里是什么样子时,我有过一个单行文本,正确显示:

enter image description here

当文本跨越多行但出现这种情况:

enter image description here

这里的我正在使用的界面生成器设置:

enter image description here

理想情况下,我希望文本视图保持在屏幕的顶部,只占用尽可能多的空间,因为它需要显示文本,但我真的不能告诉我哪里出错了。

回答

0

使用自动布局处理文本视图有点棘手。如果可能,请使用UILabel。如果不是,那么文本视图有几个问题,而最易于管理的解决方案是添加高度约束,然后在代码中对其进行处理。

文本视图内容的高度可以被确定为:

let height = textView.sizeThatFits(textView.frame.size).height 

另外,也可以使用

let height = textView.contentSize.height 

但有时结果不正确。

您确实需要为文本视图设置委托,以便在更改时刷新文本视图的大小。

+0

一旦我拥有了该尺寸,我该怎么做?为UILabel设置一个新框架什么也不做。 – spacitron

+0

对不起,这是为了UITextView。你的问题必须在其他地方。至于这种用法,您需要一个出口到文本视图的高度约束,并将其常量设置为检索高度的值。 –

0

那么你确实已经根据你的约束给予它许可。任何高度> 0,只要它距上边距20。既然你没有任何其他的观点立足你的身高关,你可以挂钩一个出口到标签中,并使用此:

@IBOutlet weak var label: UILabel! 

override func viewDidAppear(_ animated: Bool) { 
    super.viewDidAppear(animated) 
    label.sizeToFit() 
} 
+0

标签本身已经做到了。它有一个内容拥抱优先级,默认应该设置为251。这意味着如果没有设置约束来限制大小,那么它将缩小与其内容(文本)允许的一样多。问题是使用这样的文本视图。 –

+0

我在他的示例中设置了约束并运行此代码。它解决了这个问题。另外,OP询问UILabel,而不是UITextView。 – Frankie

+0

这并没有解决我的问题。既不要调用sizeToFit()也不要以编程方式设置标签的框架。 – spacitron

0
  1. 取消选中“首选宽度”明确复选框(大小督察)
  2. 删除UILabel上的高度限制。

它肯定会工作。