【问题标题】:UITableView inside ScrollView with infinite scrollScrollView 内的 UITableView 无限滚动
【发布时间】:2018-12-12 20:23:03
【问题描述】:

我有一个由两个元素(UIViewUITableView)组成的屏幕。当用户滚动屏幕时,我希望UIView 离开屏幕(顶部)并且UITableView 开始滚动。我给UIView 一个固定高度,给UITableViewCells' 一个固定高度。此外,我正在设置底部和顶部锚点,但 UITableView 不会显示如果我没有给 UITableView 指定特定高度。如果我为UITableView 指定特定高度,它只会显示一些单元格而不是全部。

另外:起初tableView是空的,因为它的数据源是空的。当用户点击 UIView 中的按钮时,datasource 完成并且 tableview 刷新数据。

我有一些帖子,但所有帖子都说为 UITableView 提供固定高度。我不知道如何显示所有固定高度的单元格。 例如: Dynamic height TableView in a Scroll View

锚点:

boxView.anchor(self.view.topAnchor, left: self.view.leftAnchor, bottom: nil, right: self.view.rightAnchor, topConstant: 20, leftConstant: 10, bottomConstant: 0, rightConstant: 10, widthConstant: 0, heightConstant: 240)
sTableView.anchor(self.boxView.bottomAnchor, left: self.view.leftAnchor, bottom: self.scrollView.bottomAnchor, right: self.view.rightAnchor, topConstant: 0, leftConstant: 0, bottomConstant: 0, rightConstant: 0, widthConstant: 0, heightConstant: 100)

我如何声明 UITableView:

let sTableView = UITableView()
var dataSource: [SupportedService]?

let scrollView = UIScrollView()

viewDidLoad(){
sTableView.delegate = self
sTableView.dataSource = self
sTableView.register(BaseCell.self, forCellReuseIdentifier:"supportedServicesCell")
sTableView.tableFooterView = UIView()
sTableView.isScrollEnabled = false
self.scrollView.addSubview(sTableView)

self.view.addSubview(scrollView)
}
@objc func buttonTapped(_ sender: UIButton){
//Do Some Network Requests Here (Data is temp)
dataSource = DATA
sTableView.reloadData()
}

TableView 函数:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if let data = dataSource{
        return data.count
    }else{
        return 0
    }
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "supportedServicesCell", for: indexPath) as! BaseCell
    guard let data = dataSource else { return cell }
    cell.textLabel?.text = data[indexPath.row].title

    return cell
}

滚动前我想要它:

滚动后:

【问题讨论】:

  • 嵌套需要什么,我觉得只有单tableview才有可能!!!
  • 将您的表格视图分成两部分。或配置表头视图。就是这样。
  • 我配置了 tableView 标题,但现在单元格显示在标题 @SPatel 后面
  • 可以发截图链接吗?

标签: ios swift uitableview uiscrollview


【解决方案1】:

我见过一些应用程序这样做。但他们的方法不同。如果有帮助,我会解释这种方法。他们就是这样做的。

  • 一开始就为 tableView 禁用了用户交互。
  • 一旦用户向上滑动屏幕。 view 被动画化以通过离开屏幕来隐藏自己,tableView 占据整个屏幕。
  • 现在tableView 上再次启用了用户交互,它的功能类似于普通的 tableView。
  • 一旦用户在到达tableView 的顶部后仍尝试向下滚动,view 会以动画方式返回到该位置,并且 parentView 会返回到原来的状态。

【讨论】:

  • 如果我可以获得触摸位置和滑动位置,我可以按照您的说法移动视图标题,但我可能会遇到 UITableViews CellForRowAt 函数不会被调用的问题。我去看看
  • 您可以获得触摸位置和滑动位置。 Apple 有代表来获取这些值。
【解决方案2】:

您需要改变为此类设计设计应用 UI 的方法。对于当前的设计,您使用 headerview 制作 UITableview 是一种简单、漂亮且更好的方法,然后将 UIView 和 UITableview 嵌入到 UIScrollView 中。

【讨论】:

  • 我会检查的。我其实在想它。谢谢。
猜你喜欢
  • 1970-01-01
  • 2016-12-22
  • 2012-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多