具有自动布局的tableView中标签的高度问题

Posted

技术标签:

【中文标题】具有自动布局的tableView中标签的高度问题【英文标题】:Label's height issue in tableView with auto layout 【发布时间】:2014-03-02 10:53:04 【问题描述】:

我使用自动布局。我在自定义 UITableViewCell 中显示 2 个标签。 Label1 高于 Label2。他们的文字是动态的。

问题是其中一个标签在显示时的高度大于其文本。 我尝试更改他们的Content Hugging Priority

所以发生的情况是,如果优先级相同或Label1 的优先级更高,则Label1 具有精确的高度以适合其文本,但Label2 的高度大于所需的高度。当Label2 的拥抱优先级高于Label1 的高度时。

知道怎么解决吗?

【问题讨论】:

单元格的高度是否可变? 大多数时候我遇到这种问题,是因为一个无关紧要的约束。您的约束是添加到代码还是 IB 中?您是否尝试过删除所有约束并再次添加它们?控制台是否会为您提供任何与布局相关的消息? @MariusFalkenbergWaldal 我尝试过几次从头开始添加约束。不,控制台没有给出任何错误。 您是在使用界面生成器,还是在代码中添加约束? @MariusFalkenbergWaldal 我在 IB 中添加约束。 【参考方案1】:

您似乎希望您的单元格根据自动布局的约束信息自动调整大小,但UITableView 使用框架/自动调整大小掩码来调整单元格大小。如果这是预期,并且您没有像this question 中那样自动调整单元格大小,那么您的标签将要么强制剪辑自己,以适应从表格视图中给出的大小的单元格,要么增长到满足所有边距约束。

由于内容拥抱和内容压缩阻力优先级值小于要求(小于 1000),因此它们被视为“可选”并且将在不违反任何其他要求的约束的情况下尽可能接近地满足它们。这就是您的标签开始增长(或自行剪裁)的原因。

这可以通过几种方式解决:

    如果您不关心具有可变高度的单元格,并且对向单元格顶部迁移的标签感到满意,则不需要将底部标签固定到超级视图的下边缘的约束.更具体地说,使该约束的优先级低于两个标签的垂直contentHuggingPriority。这样,包含优先级约束的内容将优先于较低的约束。 让您的单元格自动调整大小(使用auto layout 或其他方式),这样系统就不必考虑每个标签的垂直contentHuggingPriority“可选”。

【讨论】:

如果您的一个标签比它需要的高,但另一个标签的大小正确,那么单元格如何才能成为正确的大小?当您在我的答案中尝试#1时会发生什么?标签的大小是否正确,但只是更靠近单元格的顶部?还是有什么不同?【参考方案2】:

我在尝试了很多东西后解决了这个问题。我唯一要做的就是将水平和垂直内容压缩阻力优先级设置为必需。即1000。 我对所有标签都这样做了,因为我不希望任何标签修剪它们的内容。

另外一件非常重要的事情是获得正确的单元格高度。如果在计算自定义单元格的高度时甚至出现 1pt 的错误,它将不会按预期显示。

提示:

    如果任何视图的高度大于预期,则可能计算出的单元格高度大于实际需要的高度。 如果任何视图垂直缩小或不显示全部内容,则计算出的单元格高度可能小于实际需要的高度。

Yoy 可以通过向您为单元格计算的高度(变量)添加/删除常数值来测试高度是否错误。

【讨论】:

以上是关于具有自动布局的tableView中标签的高度问题的主要内容,如果未能解决你的问题,请参考以下文章

滚动时 Tableview 单元格中标签的自动收缩功能不起作用

CustomUITableView 中标签的文本没有改变

无法根据objective-c中标签的文本大小设置单元格大小

表单设计中标签的布局方式有哪些

更改自定义 UICollectionCell 中标签的边框宽度

uitableview 自动布局自定义单元格导致额外高度