自定义UITableViewCell中的自动布局被忽略


92

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

这是结果和情节提要中的约束的屏幕截图。 在此处输入图片说明

在此处输入图片说明

在保存tableView的VC中,这是viewDidLoad中的代码

tableView.estimatedRowHeight = 120.0
tableView.rowHeight = UITableViewAutomaticDimension

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

谢谢


更新资料

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

  • 领导观看的空间
  • 顶级观看空间
  • 固定的宽度和高度(100和100)
  • 容器边缘的底部空间,以确保单元格具有所有垂直约束来确定其高度

而且,通过简化的界面,仍然不会考虑自动布局,这提示我该问题并非来自设置不当的约束。

在“大小”检查器中,将行高设置为120,并选中“自定义”。单元具有正确的自定义类,单元重用标识符正确。


更新:找到解决方案

这是一个简单的错误,请参阅下面的答案。


检查您的调试终端-那里是否存在任何NSLayoutConstraint日志,提示某些内容未按预期运行?
马修·哈拉特

调试终端@MatthewHallatt中什么都没有出现,谢谢。
Kqtr

@Kqtr尝试注释这两行,然后正常运行一次以检查是否有任何更改?
Tushar Sharma

@TusharSharma注释掉这两行与仅注释掉rowHeight行具有相同的效果:单元格的高度为120.0,但是自动布局无效。
Kqtr

1
接口构建器是否将任何约束显示为缺失或模棱两可?检查黄色或红色的感叹号。
马修·哈拉特

Answers:


248

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

将UIView设置回UIView类可以解决此问题。

只是为了清楚


2
我被困在这个问题上好几个小时了,这解决了,谢谢!
candidev

我几乎整天都在浪费,直到我来到这里。
重生

-3

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

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

 return x
}

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


谢谢,不幸的是我没有重写它:我什至没有这个tableView的委托,只有一个数据源。
Kqtr'4

您是否将textview约束设置为单元格的所有for边缘?并禁用了textView的滚动功能吗?
Jaafar Barek '17

多行标签(0行)具有以下限制:1)垂直间距,其左侧为数字2)到超级视图的顶部空间3)到超级视图的尾部空间,以及4)使用Asked By标签的底部空间。
Kqtr'4
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.