【问题标题】:iOS AutoLayout - Label overlaps nearby labeliOS AutoLayout - 标签与附近的标签重叠
【发布时间】:2016-08-15 00:54:37
【问题描述】:

标签约束有问题。

我的目标是在 tableViewCell 的同一 Y 坐标上有 2 个标签。其中一个标签固定在左侧,另一个固定在右侧。

像这样:

[This is the first label]      [Second]

第一个标签应该有一个基于它必须显示的文本的动态宽度,但它应该在距离第二个标签大约 20 点的位置结束。

我尝试了很多限制,但有时第一个标签似乎将第二个标签推出视图,有时第一个标签与第二个标签重叠,如下例所示:

第一个标签有以下约束:

Top Space to Superview
Leading Space to Superview
Bottom Space to a third label
Trailing Space to THE second Label (<= 20)

正确显示两个标签的正确方法是什么?

提前致谢,感谢您的帮助!

编辑

尝试给第二个标签一个最大宽度的解决方案。现在,它随机工作或不工作。我完全不明白。

【问题讨论】:

  • 我认为你应该优先考虑。优先考虑第二个尾随约束和第一个和第二个之间的水平间距。除此之外,尝试为第一个标签提供
  • 你右边的第二个标签有固定宽度吗???
  • "Trailing Space to THE second Label (= 20)?
  • >= 20 从视图中推送第二个标签。
  • @bioaim :设置 >=20 不会将第二个标签推出 :) 这意味着第一个标签和第二个标签之间的距离至少为 20 :) 因为您的右侧标签固定在其右侧结束和第二个标签具有固定宽度:) 它永远不会被推出屏幕:) 唯一会发生的是如果左标签很小,左右标签之间的距离将大于 20,这意味着左标签将减少宽度 :) 并且左标签很大,它会扩大直到 2 个标签之间的距离为 20,之后左标签中的文本将被截断 :)

标签: ios cocoa-touch autolayout


【解决方案1】:

和其他人说的一样,需要设置从左标签到右标签的拖尾约束为大于等于,这样两者之间有至少20的差距.

但是,您还需要指定首先截断哪个标签。如果不这样做,iOS 将自行选择,这可能就是您当前的解决方案仅在某些时候有效的原因。这就是内容压缩阻力优先级发挥作用的地方。为您要首先截断的标签设置较低的值。

您可以在大小检查器下的情节提要上执行此操作。

我假设您希望先截断左侧标签。在这种情况下,请确保左侧标签的水平内容抗压缩优先级低于右侧标签。注意上面我是怎么把它降到 749 的,因为默认是 750。

查看this answer,了解有关内容压缩和内容拥抱的详细说明。

【讨论】:

  • 非常感谢!这终于完美了。也谢谢你的链接,我现在明白多了!
【解决方案2】:

如果右侧的第二个标签具有固定宽度或最大宽度:) 你可以这样做:)

  1. 将左标签和右标签之间的距离设置为 >= 20
  2. 使用 [yourvalue] 或 [>=your value] 将右侧标签的宽度设置为某个值

所以总的来说,标签的约束应该如何出现

|-(distance_to_left_Label)-[left-label]-(>=20)-[right_lable(your_value)]-(distance_to_right)-|

希望我的回答有帮助:)

【讨论】:

  • 已经尝试过这个解决方案,但这是随机工作或不工作。有时它会发挥作用,有时第二个标签会被推出视图......请参阅编辑第一篇文章
  • 我给了它一个
  • @Bioaim : 右边的标签好友不是左右之间的距离 :) 好的,做一件事让我们简化一下,我现在为右标签“FIXED”设置固定宽度,然后告诉我会想到 >= 或 =20 设置为左​​右标签之间的距离 :) 并告诉我发生了什么 :)
  • 我知道你的意思,它根本不适合我。我知道有:(leading-space)-[left-label]-(>=20)-[right-label(width-40)]-(trailing-space)
猜你喜欢
  • 1970-01-01
  • 2019-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多