【问题标题】:UITableView is not showing inside a UIScrollViewUITableView 未显示在 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严格说不要这样做

标签: ios uitableview uiscrollview


【解决方案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 类中的覆盖

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-11
      • 1970-01-01
      • 2011-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多