在自定义 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)?