【问题标题】:Non scrollable UITableView inside UIScrollViewUIScrollView 内不可滚动的 UITableView
【发布时间】:2019-11-07 00:10:25
【问题描述】:

我有一个应用程序,我想在其中实现 UITableView,其可滚动属性设置为 False。

我在 UIScrollView 中添加了 UITableView 来完成这个任务,现在我希望我的 UIScrollView 向下滚动到 UITableView 的最后一个单元格。那么,如何为 UIScrollView 分配动态高度,以便它滚动到 UITableView 的最后一个单元格。

【问题讨论】:

  • 它有点复杂,你需要考虑很多事情,例如:你需要计算你的tableView的内容,并调整你的scrollView的contentSize但是是可行的
  • 是的,我已经通过使用以下行 self.tableView.frame.size = tableView.contentSize 获得了 tableview 高度。 // 这将返回 uitableview 的宽度和高度,但是我怎样才能将它应用到滚动视图?
  • 设置 scrollView.contentSize = 你的表格(宽度,高度)
  • 它现在完美运行

标签: ios uitableview uiscrollview swift4.2 swift5


【解决方案1】:

你真的需要滚动视图吗?你可以简单地做到这一点而无需滚动视图

tableView.scrollToRow(at: IndexPath(row: lastIndex, section: 0), at: .middle, animated: true)

tableView.setContentOffset(CGPoint(x: 0, y: tableView.contentSize.height - tableView.frame.height), animated: true)

Apple 也不建议在 scrollview 中添加 tableview Apple style guide

不要将滚动视图放在另一个滚动视图中。这样做会创建一个难以控制的不可预测的界面。

【讨论】:

  • 是的,我想要滚动视图,因为我有 uiview 和 uicollectionview 以及更多组件以及不可滚动的 tableView。所以 ScrollView 对我来说是这项任务所必需的
【解决方案2】:

我已经解决了这个问题并在此处发布我的答案,以便其他开发人员想要完成此类任务时有所帮助。

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    self.scrollView.contentSize = CGSize(width: tblHomeTableView.frame.width, height: self.tblHomeTableView.frame.height)
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tblHomeTableView.dequeueReusableCell(withIdentifier: "HomeTableViewCell", for: indexPath) as! HomeTableViewCell
    cell.lblDayCoount.text = "Row: \(indexPath.row + 1)"
    self.tblHomeTableView.frame.size = tblHomeTableView.contentSize
    return cell
}

这将根据 UITableView 中的内容调整 UIScrollView 的高度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-26
    • 2013-08-01
    • 2019-11-11
    • 2010-11-01
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    • 2020-06-26
    相关资源
    最近更新 更多