【问题标题】:Using Auto Layout, how do I make two labels on the same "line" be dynamic in their widths (adjusting with how wide each one needs to be)?使用自动布局,我如何使同一“行”上的两个标签的宽度是动态的(根据每个标签需要的宽度进行调整)?
【发布时间】:2013-10-28 12:10:03
【问题描述】:

假设我有两个 UILabel,一个是 URL,一个是计时器:

[http://website.com/link/to/specific/story] [9m 42s]

但是“计时器”UILabel 的宽度变化很大。例如,有时它只是12s,有时它是125h 32m 8s。有很多可变性。我希望计时器 UILabel 占用 所需的宽度,而 URL 标签 占用其余部分。这意味着如果计时器更长,则 URL 更短,等等。

如何在自动布局中执行此操作?最好在 Interface Builder 中?

【问题讨论】:

  • 内在内容大小 + 优先级

标签: ios objective-c uilabel autolayout nslayoutconstraint


【解决方案1】:

这就是抗压性变得重要的地方。由于 URL 标签需要先收缩(为了容纳定时器标签的空间),所以 URL 标签的抗压性应该低于定时器标签的抗压性(当然是水平方向)。您可以在 IB 中轻松设置此属性。

【讨论】:

  • 我是否给标签设置宽度?如何让一个人愿意超越另一个人?
  • 不,不要给它们宽度,让它们保持其固有的内容大小。
  • 如果我删除宽度约束,我会收到约束不足的警告。这些是我对它的限制,我还应该用它做什么? i.imgur.com/DIfF8S9.png
  • 移除高度。如果您不给它一个宽度或高度,则假定为固有内容大小。如果你给它两者之一,你也需要提供另一个。如果它在没有给出宽度的情况下假设内在内容宽度和在没有给出高度的情况下假设内在内容高度会更好,但这不是它目前的工作方式。
  • 警告是什么?您可能需要更新您的框架,因为标签尺寸现在不同了。
【解决方案2】:

你应该设置压缩阻力,URL标签必须有较低的值;

将标签之间的水平间距设置为常量(例如零或默认值);

为每个标签设置宽度并选择“小于”或“大于”关系,这些值设置了缩小/扩大视图的限制。

【讨论】:

  • @DougSmith 在您的项目中您没有执行步骤 2 和 3。
  • 抱歉,我按下了回车键 :) @DougSmith 在你的项目中你没有执行步骤 2 和 3。我已经修改了你的项目 cl.ly/0b1Q2R1R1W1v 这是我所做的:创建了正确的水平约束:来自 superview到第一个标签,从第一个标签到第二个标签,从第二个标签到superview。这修复了“paddind”。然后我为每个标签固定宽度并使其“大于”和“小于”,以便宽度可以改变。我为 1s 标签设置宽度 >=100 和 2nd - 50
  • 该项目中存在约束警告。
  • @DougSmith 实际上我是第一次在 Xcode5 中使用 IB :) 这是我在 Xcode4 中创建的项目,相同的步骤,没有模棱两可的布局:cl.ly/44183I3w0N0j 一定是 Xcode5 中的新东西.. .
  • 非常感谢!这个答案完全解决了我的问题。我改变了优先级,但没有改变抗压性。
猜你喜欢
  • 2014-11-12
  • 2014-12-22
  • 1970-01-01
  • 2014-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-24
  • 1970-01-01
相关资源
最近更新 更多