将文本限制在一个位置,然后根据需要动态移动

Constrain text to a location, then have it dynamically move if required

我正在制作一个带有两个标签的 UITableView。我已将 secondLabel 限制为 firstLabel 的 +12,这意味着如果 firstLabel 包含大量文本,它将 沿 移动。然而,这意味着如果 firstLabel 几乎不包含任何文本,则 secondLabel 将向后移动 。我该怎么做才能完成这项工作?

我想让它有这样的反应:

secondLabel 尽管 firstLabel:

中的文字很少,但仍保留在原位
_________________________________________________________
|                                                        |
|  [abc]        [secondLabel]                            |
|________________________________________________________|

secondLabel 由于 firstLabel 有很多文本要显示而移动:

__________________________________________________________
|                                                        |
|  [extralongfirstLabel] [secondLabel]                   |
|________________________________________________________|

firstLabelsecondLabel 都有不同数量的文本。 firstLabel 前导面应限制在 SuperView 边缘。 secondLabel 将与 firstLabel 的前导边保持 12 的距离,但在不约束到 firstLabel 时(当它包含很少的文本时)与 SuperView 保持 56.5 的距离。

两个文本标签都在单元格的左侧,允许文本分布在单元格中。

我正在尝试通过 IB 完成此任务,但如果您有任何代码建议,请告诉我。

这听起来像是针对多个约束的作业,其中一个约束的优先级较低。

首先,需要(优先级 1000)大于或等于约束 space 第二个标签的前缘距离第一个标签的后缘 12 点。

其次,单元格和第二个标签前缘之间距离的低优先级约束。当第一个标签变得太大时,这将被破坏,这很好:这就是为什么它的优先级较低。

当第二个约束被破坏时,第一个约束将成为标签之间距离的控制。

因此,对于第一个标签,将其前导约束设置为与 superview 相同,并按照您的意愿设置常量。

现在,为第二个标签设置两个前导约束。

  1. 一个等于第一个标签的带有一些静态的尾随约束 常量(表示关系 等于 )并具有较低的优先级(将其优先级设置为低于第二个主要约束,例如 999)

  2. 第二个等于父视图的前导约束 关系大于或等于

限制条件:


结果: