关于ios:动态视图更改(即UILabel)与autoLayout

Dynamic view changes (i.e. UILabel) with autoLayout

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

的右侧对齐 7 个点

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

  • 这只能在 storyBoard 上完成(没有代码)吗?
  • 我在情节提要布局中定义了水平约束,并在代码中定义了 sizeToFit:
    并发现水平约束被覆盖。
    尝试更改 viewDidLoad: 中的帧,但并非所有帧都已更新(以 0 延迟执行选择器 - 更新所有单元格中的所有标签,但创建了 1 秒延迟。)
  • 请指教,
    谢谢阿萨夫


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

    1.确保您的单元格带有两个标签并且没有自动布局约束(如果有,请清除它们)

    2.向 Label 1:

    添加约束

    TwoLabelsCell_Label1_Constraints

    3.向 Label 2:

    添加约束

    TwoLabelsCell_Label2_Constraints

    结果:

    TwoLabelsCell_Result

    备注:

    • 对布局的操作应该通过覆盖视图控制器中的 updateViewConstraints 来完成。只是不要忘记调用 [super updateViewConstraints]

    • 在你的情况下不需要处理 sizeToFit: 方法。


    问题 1)

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

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

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

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

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

    为此,请在 Interface Builder 中设置拥抱(或压缩)优先级。

    问题 2)

    [viewDidLoad:] 不适合改变几何的东西。 [viewWillAppear:]

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

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