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,允许您的 tableview
在 scrollview
内!
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 未显示在 UIScrollView 内