UITableView 未显示在 UIScrollView 内

Posted

技术标签:

【中文标题】UITableView 未显示在 UIScrollView 内【英文标题】:UITableView is not showing inside a UIScrollView 【发布时间】:2013-06-27 09:00:16 【问题描述】:

我的视图中有一个很长的 UIScrollView(大约 1000 像素高),在这个 UIScrollView 的末尾我有一个 UITableView。

cellForRowAtIndexPath 从未被调用(当然我检查了委托和数据源是否连接正确,并且表的 IBOutlet 很强大)但 numberOfRowsInSection 被调用。

我尝试在 UIScrollView 滚动时重新加载 TableView,因此当表格处于焦点时,可能会调用 cellForRowAtIndexPath,但没有运气。

有没有人在尝试同时使用 tableview 和 scrollview 时遇到类似的行为?

【问题讨论】:

你的 numberOfRowsInSection 是否有机会返回 0? 不,我手动返回 2 以确保 节数呢? 为什么要在scrollview中设置tableview,太可怕了,直接把tableHeaderView设置成tableview就可以得到同样的结果 为什么要在scrollview里面加table?会导致意想不到的问题。apply严格说不要这样做 【参考方案1】:

你的层次结构是这样的:

有一个父视图。在父视图内部有一个滚动视图和一个表格视图。因此,您的 tableview 距离 parentview 的原点 1000 处。

因此,tableview 永远不会对您的 parentview 可见,也不会触发任何委托。

【讨论】:

即使向下滚动,table 到 parent 的位置也会保持 1000? 是的..这就是它没有出现的原因。它是滚动而不是你的 tableview 的滚动视图。 谢谢大佬,那就没救了,还是换个新设计吧。 不要追求新设计。 tableview.headerview = yourscrollview;不要将滚动视图添加到您的父视图中。它会解决问题。【参考方案2】:

像这样将您的视图作为 UITableView 的 headerView 包含在内:

【讨论】:

【参考方案3】:

2020 年更新,Swift 5.X。创建一个自定义 UITableView,允许您的 tableviewscrollview 内!

1) 创建 UITableView 的子类:

导入 UIKit

最终类 ContentSizedTableView: UITableView 覆盖 var contentSize:CGSize 设置 invalidateIntrinsicContentSize()

override var intrinsicContentSize: CGSize 
    layoutIfNeeded()
    return CGSize(width: UIView.noIntrinsicMetric, height: contentSize.height)

2) 将 UITableView 添加到您的布局并在所有方面设置约束。将它的类设置为 ContentSizedTableView。

3) 你应该看到一些错误,因为 Storyboard 没有考虑我们的子类'intrinsicContentSize。在运行时,它将使用 ContentSizedTableView 类中的覆盖

【讨论】:

以上是关于UITableView 未显示在 UIScrollView 内的主要内容,如果未能解决你的问题,请参考以下文章

拦截 UITableView 滚动触摸

JSON 数据未显示在 UITableView 上

UITableView 未显示在物理设备部署中

UITableView 未显示在 UIScrollView 内

UITableView 未显示在 UIStackView 中

单元格数据未显示在 UITableView 中?