用于根据上标签内容向下移动标签的自动布局约束

Posted

技术标签:

【中文标题】用于根据上标签内容向下移动标签的自动布局约束【英文标题】:Auto-layout constraints for shifting the label down based on upper labels contents 【发布时间】:2016-11-26 21:05:00 【问题描述】:

我有一个单元格 xib,标签在另一个下方列出。这是单元格xib的图片。

根据“地址详细信息”的内容,该特定标签将展开,因此,我希望将其下方的标签向下移动,即联系人、联系方式、IFSC 和 MICR 相关标签。

我确实为分支名称标签和地址详细信息标签添加了一些约束。如果我将顶部空间和底部空间约束的优先级设置为 500,那么我会看到所有标签的内容都混乱了。但是,如果我将优先级设置为 1000,则所有标签看起来都已到位,但“地址详细信息”标签不会根据其内容展开。

为了扩展标签,我正在使用

label.numberOfLines = 0;
label.text = addressDetails;
[label sizeToFit];

优先级设置为 500 的图片:

优先级设置为 1000 的图片:

我以前从未在这里发布过任何与自动布局相关的问题。我不确定我发布的信息是否足以解决我的问题,但需要任何其他信息,请告诉我。

提前致谢!

【问题讨论】:

为什么有高度限制?对于优先级 1000,您是否会收到有关冲突约束的警告? @Paulw11 - 我没有得到与此冲突的约束。我当时是= 32,所以因为它可以扩展,所以我做到了> = 32。 我的意思是你根本不应该有高度限制 【参考方案1】:

你应该像这样重置你的约束.. Add Top, Leading and trailing 约束 Address Detail Label 并让 UILabel 根据内容调整它们的大小(不要添加高度约束)。

现在将这些约束添加到Address Label -> (Top = Address Detail Label Top, Give Height Constraint and Leading and trailing)。

接下来的两个标签 ContactContact Detail Label 必须位于 Address detail label 下方,而不是位于 Address Label 下方。

现在heightForRowAtIndexPath 应该返回UITableViewAutomaticDimension

现在点击运行按钮并测试它是否适合您。

【讨论】:

【参考方案2】:

关键是为单元格中的最后一个元素添加底部约束,并将estimatedRowHeight设置为tableviewcell的高度,将rowheight设置为UITableViewAutomaticDimension。无需设置高度约束或实现 heightForRowAtIndexPath

对于约束: 1.首先在tableview单元格中设置分支标签的顶部、前导和尾部空格。 2.然后对齐分支、地址、联系人标签的前缘。 3.然后对齐分支、地址值和联系值标签的后沿。 4.对齐地址值和联系人值标签的前沿。 5. 然后对齐地址和地址值的垂直中心。联系人和联系人值也是如此。 6. 然后将顶部空间约束添加到地址值标签和联系人值标签。 7.地址标签增加宽度限制。 8. 记下单元格的高度,说它的 x。将表格行高设置为 x。

这应该会完成您的一般约束。

现在有了扩展标签:

    为联系人值标签添加底部约束(无论是最底部的标签)。

    然后在viewdidload中,设置rowheight和预估行高:

    self.tableView.estimatedRowHeight = x;
    self.tableView.rowHeight = UITableViewAutomaticDimension;
    

对于地址值标签,设置行数为0,换行符为自动换行。

【讨论】:

现在为了让它工作,我将优先级更新为 750 而不是 500 或 1000,这很有帮助。我会试一试,然后告诉你。谢谢!

以上是关于用于根据上标签内容向下移动标签的自动布局约束的主要内容,如果未能解决你的问题,请参考以下文章

可变宽度标签列的 iOS 自动布局

如何使用自动布局移动标签并为更改设置动画?

空 UIView 上的自动布局约束无法按预期工作

iOS 自动布局 UILabel 换行

建议使用自动布局约束动态添加标签和文本字段的逻辑

使用带有自动布局的推送时隐藏按钮时,约束更新导致项目移动