小编tir*_*tea的帖子

在计算UITableViewCell高度(所有样式)时,Autolayout忽略多行detailTextLabel

所以我试图使用内置的UITableViewCell样式 - 特别是UITableViewCellStyleSubtitle - 与(单)行textLabel多行 detailTextLabel.但是(自动)计算的单元格高度始终太短,并且似乎忽略了超过1行细节.

我已经尝试过使用numberOfLines = 0,estimatedRowHeight,UITableViewAutomaticDimension,preferredMaxWidthLayout等,但在所有排列行为中 - 实际上对于所有 UITableViewCell样式 - 看来UITableViewAutomaticDimension单元格高度计算将正确地考虑多行textLabel(耶! ),但错误地假设detailTextlabel最多是单行(nay!).因此,具有多线detailTextLabel的细胞太短,因此细胞内容溢出细胞的顶部和底部.

在此输入图像描述

我发布了一个快速测试应用程序,在这里显示GitHub上的这种行为.添加额外的文本行很好 - 所有单元格样式的高度适当增加以适应 - 但添加额外的细节行不会改变单元格高度,并且很快会导致内容溢出; 文本+细节本身正确布局,并且一起正确地居中在单元格的中间(因此在这种意义上,layoutSubviews正常工作),但整体单元格高度本身不变.

看起来cell.contentView和标签之间几乎没有实际的顶部和底部约束,而是直接从(可能是多行)textLabel和(只有单行)detailTextLabel的高度计算单元格高度.然后一切都集中在单元格的中间...再次,多行textLabel很好,我在textLabel和detailTextLabel之间没有任何不同,但只有前者(正确)调整单元格高度.

所以我的问题是,如果可以使用内置的UITableViewCell样式来可靠地显示多行 detailTextLabels,或者它根本不可能而你需要创建一个自定义子类呢?[或者,几乎等效地,不必覆盖子类中的layoutSubviews并手动重新连接所有约束].


[2016年5月4日]结论:从iOS9开始,多行detailTextLabels无法按预期使用UITableViewAutomaticDimension; 单元格将始终太短,文本/细节将溢出顶部和底部.您必须自己手动计算正确的单元格高度,或者创建和布局您自己的等效自定义UITableViewCell子类,或者(请参阅下面的答案)子类UITableViewCell并修复systemLayoutSizeFittingSize:withHorizontalFittingPriority:verticalFittingPriority:以返回正确的高度[推荐]

uitableview ios autolayout

11
推荐指数
2
解决办法
2584
查看次数

标签 统计

autolayout ×1

ios ×1

uitableview ×1