动态视图使用autoLayout更改(即UILabel)

时间:2014-07-09 10:01:47

标签: ios dynamic autolayout sizetofit

我需要创建两个UILabel,应根据UITableViewCell内的文本大小动态调整大小。 第一个UILabel应该增长(基于文字)到左侧,并始终将15个点对齐到右边框。 第二个UILabel应该(也动态向左增长)并在第一个UILabel右侧对齐7个点。

... [label 2]<--7p-->[label 1]<--15p-->|right cell border

  1. 这只能在 storyBoard (没有代码)上完成吗?
  2. 我在故事板布局中定义了水平约束,在代码上定义了sizeToFit:。 并发现水平约束被覆盖了。 试图更改viewDidLoad:中的帧,但并非所有帧都更新(执行选择器有0延迟 - 更新所有单元格中的所有标签,但创建了一秒延迟。)
  3. 请指教, 谢谢Asaf

2 个答案:

答案 0 :(得分:1)

问题1)

实际上你可以在代码中做到这一点。但我认为Interface Builder在您的情况下更好。

我认为您不必在代码中使用[sizeToFit:]。

如果您没有为标签设置宽度限制,我认为您的故事板中有警告。

像UILabel这样的UIControl,UIButton具有内在大小,因为它们具有文本内容。所以你不需要设置宽度约束。

但是你有两个标签,当标签之间存在冲突时,你应该让autolayout知道哪个标签更重要。 - 前。如果标签有长文本,则显示哪个标签的文本而不缩短(...)。

为此,请在Interface Builder中设置Hugging(或Compression)优先级。

问题2)

[viewDidLoad:]不适合更改几何体。在[viewWillAppear:]

之后,视图层次结构中添加了UIViewController的视图

如果您需要更多信息,请告诉我们。

答案 1 :(得分:1)

您可以使用代码或使用StoryBoard自动布局来实现结果。以下是Storyboard自动布局的步骤:

1。确保您的单元格包含两个标签且没有自动布局限制(如果有则清除它们)

2。Label 1添加约束:

TwoLabelsCell_Label1_Constraints

3. Label 2添加约束:

TwoLabelsCell_Label2_Constraints

<强>结果:

TwoLabelsCell_Result

<强>说明:

  • 应通过覆盖视图控制器中的updateViewConstraints来完成布局操作。别忘了给[super updateViewConstraints]打个电话。

  • 在您的案例中无需处理sizeToFit:方法。