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

时间:2014-03-02 10:53:05

标签: ios objective-c uitableview autolayout

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

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

所以会发生的情况是,如果优先级相同或Label1的优先级更高,那么Label1具有适合其文本的精确高度,但Label2具有比所需更高的高度。如果Label2的拥抱优先级高于问题,那么Label1的身高就会出现问题。

知道怎么解决吗?

2 个答案:

答案 0 :(得分:0)

看起来您希望您的单元格根据自动布局的约束信息自动调整大小,但UITableView使用框架/自动调整遮罩调整单元格的大小。如果这是期望,并且您没有像this question中那样自动调整单元格,那么您的标签将强制剪切自己,以便适合在单元格中使用从表格视图中给出的大小或成长以满足所有保证金限制。

由于内容拥抱和内容压缩阻力优先级值小于要求(小于1000),因此它们被认为是“可选的”并且在不违反任何其他所需约束的情况下尽可能地满足。这就是为什么你的标签开始增长(或削减自己)。

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

  1. 如果您不关心具有可变高度的单元格并且标签向单元格顶部移动时很好,那么将底部标签固定到superview下边缘的约束是非必需的。更具体地说,对于两个标签,使该约束的优先级低于垂直contentHuggingPriority。这样,拥抱优先级约束的内容将优先于较低的约束。
  2. 让您的单元格自行调整大小(使用auto layout或其他方式),以便系统永远不必考虑每个标签“可选”的垂直contentHuggingPriority

答案 1 :(得分:-1)

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

另一件重要的事情是获得正确的细胞高度。如果计算自定义单元格高度时甚至有1pt的错误,则不会按预期显示。

提示:

  1. 如果任何视图的高度大于预期,则可能计算出的单元格高度大于实际需要的高度。
  2. 如果任何视图垂直缩小或不显示整个内容,则可能计算出的单元格高度小于实际需要的高度。
  3. Yoy可以通过添加/删除您为单元格计算的高度(变量)的常量值来测试高度是否错误。