【问题标题】:Dynamic view changes (i.e. UILabel) with autoLayout使用 autoLayout 进行动态视图更改(即 UILabel)
【发布时间】:2014-08-30 07:14:05
【问题描述】:

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

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

  1. 这只能在 storyBoard 上完成(无需代码)吗?
  2. 我在情节提要布局中定义了水平约束,并在代码中定义了sizeToFit:。 并发现水平约束已被覆盖。 尝试更改 viewDidLoad: 中的帧,但并非所有帧都已更新(以 0 延迟执行选择器 - 更新所有单元格中的所有标签,但产生一秒延迟。)

请指教, 谢谢阿萨夫

【问题讨论】:

    标签: ios dynamic autolayout sizetofit


    【解决方案1】:

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

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

    2.Label 1添加约束:

    3.Label 2添加约束:

    结果:

    备注:

    • 应通过在视图控制器中覆盖 updateViewConstraints 来完成布局操作。只是不要忘记致电[super updateViewConstraints]

    • 在您的情况下无需处理sizeToFit: 方法。

    【讨论】:

    • @Asaf 你检查过解决方案了吗?它能解决你的问题吗?
    【解决方案2】:

    问题 1)

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

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

    如果您没有为标签设置宽度限制,我认为您的情节提要中有警告。

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

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

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

    问题 2)

    [viewDidLoad:] 不适合改变几何的东西。 UIViewController 的视图添加到视图层次结构中 [viewWillAppear:]

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

    【讨论】:

      猜你喜欢
      • 2019-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-07
      • 1970-01-01
      • 2013-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多