在自定义 UITableViewCell 中忽略自动布局

Posted

技术标签:

【中文标题】在自定义 UITableViewCell 中忽略自动布局【英文标题】:Autolayout is ignored in Custom UITableViewCell 【发布时间】:2017-04-10 09:47:21 【问题描述】:

尽管对所有元素设置了约束,包括单元格计算高度所需的垂直元素,但自动布局似乎被忽略了:所有单元格都被挤压了。

以下是故事板中结果和约束的屏幕截图:

在持有tableView的VC中,viewDidLoad中的代码如下:

tableView.estimatedRowHeight = 120.0
tableView.rowHeight = UITableViewAutomaticDimension

注释掉第二行会给出高度为 120.0 的单元格,但也会忽略自动布局。


更新

为了简化界面,我留下了一个标签,作为约束:

引领空间到superview 超级视图的顶部空间 固定宽度和高度(100 和 100) 容器边距的底部空间,以确保单元格具有所有垂直约束来确定其高度

在这个简化的界面中,自动布局仍然没有被考虑在内,这暗示我问题不是来自设置不当的约束。

在尺寸检查器中,行高设置为 120 并选中自定义。单元格有正确的自定义类,单元格重用标识符是正确的。

【问题讨论】:

检查您的调试终端 - 那里是否有任何 NSLayoutConstraint 日志表明某些东西没有按预期工作? 调试终端@MatthewHallatt 中没有出现任何内容,谢谢。 @Kqtr 尝试注释这两行,然后正常运行一次,检查是否有任何变化? @TusharSharma 注释掉这两行与只注释掉 rowHeight 行的效果相同:单元格的高度为 120.0,但自动布局不起作用。 界面生成器是否将任何约束显示为缺失或不明确?检查是否有黄色或红色的小感叹号。 【参考方案1】:

自动布局被忽略,因为原型单元格和单元格的 UIView 都在 IB 中被赋予了自定义单元格类。

将 UIView 设置回 UIView 类解决了这个问题。

【讨论】:

即使没有 Content View 的自定义类,我也遇到了这个问题,还有其他人遇到过这个吗? @Destiny Faith 你解决了这个问题吗? @Arjun 在 UITableViewCell 的属性窗格中,检查样式​​下拉菜单。如果它不在自定义上,它将迫使您坚持使用与所选内置样式一起使用的 ui 元素。这很可能是您的问题 你是我的英雄。 在最终如此微不足道的小修复上花费了太多时间。为什么会这样?【参考方案2】:

我认为问题在于您正在实施:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: 
IndexPath) -> CGFloat 

 return x

您需要删除此功能,以便表格视图自动计算单元格的高度。

【讨论】:

谢谢,很遗憾我没有覆盖它:实际上我什至没有这个 tableView 的委托,只有一个数据源。 您是否将 textview 约束设置为单元格的所有 for 边缘?你是否禁用了 textView 的滚动? 多行标签(0 行)具有以下限制:1)垂直间距及其左侧的数字 2)顶部空间到 superview 3)尾随空间到 superview 和 4)底部空间与 Asked按标签。

以上是关于在自定义 UITableViewCell 中忽略自动布局的主要内容,如果未能解决你的问题,请参考以下文章

如何在自定义 UITableViewCell 中增加 Label 的高度

在自定义 UITableViewCell 的子视图中添加 UIViewController

在自定义 UITableViewCell 中调整 UITextView 的大小

如何借助 AutoLayout 在自定义 UITableviewCell 中添加自定义 UIView(xib)?

无法在自定义 UITableViewCell 中更新 UITextView 的文本

UIImageView 未在自定义 UITableViewCell 中显示图像