Swift:自动布局 - 文本列 - 删除尾随和前导警告

Posted

技术标签:

【中文标题】Swift:自动布局 - 文本列 - 删除尾随和前导警告【英文标题】:Swift: Auto Layout - Columns of Text - removing trailing and leading warnings 【发布时间】:2021-03-21 08:47:05 【问题描述】:

我有两列文本。左侧锚定在顶部、左侧和底部,而右侧则相反。这仍然会产生前导和尾随警告。如何连接两列的行以告诉 Auto Layout 仅扩展其间的空间?

【问题讨论】:

即使我不明白你所说的“只是扩大中间的空间”是什么意思。我不确定 AutoLayout 如何理解您想要的内容......警告消息到底是什么? 没有看到 specific 警告,我不得不猜测它们涉及 intrinsic width 以及可能存在重叠列的事实,根据标签的内容。您应该(以某种方式)完全定义事物。一个特定的宽度,小于或等于宽度,甚至可能优先考虑某些东西。看看你的截图,为什么左上角两个标签的宽度不一样?这是因为它们固有的宽度。 警告:缺少尾随约束,这可能会导致与其他视图重叠。 【参考方案1】:

虽然确切地知道要在这些标签中添加什么文本,但 Storyboard/Interface Builder (IB) 却不知道。

所以这对你来说看起来很棒:

但是...如果“日期”文本更改为“你想什么时候开始?”会发生什么?

因为我们没有在两个标签之间给出约束,所以它们是重叠的。

所以,让我们在两个“行”上做同样的事情,但是,在标签之间添加 8 的 Trailing-to-Leading 约束:

我们已经防止了重叠,但现在我们看到了一个新问题(IB 会警告您)... 哪个标签应该压缩吗? IB(以及运行时的自动布局)会自己做出决定,这可能不是您想要的,并且可能在相似布局之间不一致。

为了解决这个问题,我们为我们确实想要压缩的标签赋予更高的抗内容压缩优先级

这是结果 - 顶部“行”的左侧标签默认为 750,右侧标签为 751,底部“行”左侧标签为 751,并且默认为 750 的右侧标签:

它看起来与“C”相同,但我们不再收到来自 IB 的错误/警告。

因此,即使您知道两列中的文本永远不会重叠,IB 仍会鼓励您提供足够的约束(和优先级设置)以确保您得到您想要的。

【讨论】:

这完全有道理。项目 B - 我可以通过 U/I 添加“Trailing-to-Leading”约束吗?大多数谷歌搜索的答案似乎是指以编程方式进行。 我可以分别添加尾随和前导,但您编写该术语的方式似乎暗示有一个集成选项。如果我这样做,改变优先级仍然会给我留下红色警告线。 还希望更改内容拥抱优先级。非常感谢,这几天一直困扰着我。 @EdwardHasted - 在情节提要中,Ctlr 从左侧标签拖动到右侧标签。从弹出窗口中选择Horizontal Spacing。它将默认为当前距离,因此编辑该新约束并将常量更改为 8(或标签之间所需的任何空间)。 再次感谢您提供如此详尽的解释。

以上是关于Swift:自动布局 - 文本列 - 删除尾随和前导警告的主要内容,如果未能解决你的问题,请参考以下文章

从String中删除尾随数字

使用 ib action-Swift 删除尾随约束

当 UILabel 给出尾随时,自动布局被破坏

iOS 自动布局更改前导和尾随空格

iOS自动布局:设置尾随空间等于superview的宽度

没有显式宽度限制且尾随空间大于或等于行为不端的自动布局