无限滚动的ScrollView中的UITableView

时间:2018-07-04 11:44:49

标签: ios swift uitableview uiscrollview

我有一个屏幕,其中包含两个元素(UIViewUITableView)。当用户滚动屏幕时,我希望UIView离开屏幕(顶部),并且UITableView开始滚动。我为UIView指定了固定高度,为UITableViewCells'指定了固定高度。另外,我设置了底部和顶部锚点,但是如果我不给UITableView指定特定高度,则UITableView不会显示。如果我指定UITableView的特定高度,则只显示部分单元格而不是全部。

此外:首先,tableView为空,因为其数据源为空。当用户点击UIView内的按钮时,数据源将完成并刷新表视图数据。

我有一些帖子,但是所有人都说给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
}

滚动之前我想要的方式:

滚动后:

2 个答案:

答案 0 :(得分:1)

我已经看到一些应用程序可以做到这一点。但是他们的方法不同。如果有帮助,我将解释该方法。这是他们的工作。

  • 一开始tableView的用户交互被禁用。
  • 用户将屏幕向上滑动一次。 view具有动画效果,可以通过移出屏幕来隐藏自身,而tableView占据整个屏幕。
  • 现在tableView上再次启用了用户交互,其功能类似于普通的tableView。
  • 即使用户到达tableView的顶部后仍尝试向下滚动,view会被动画化回到该位置,并且parentView返回其原始状态。

答案 1 :(得分:0)

您需要更改为此类设计设计应用程序UI的方法。对于当前的设计,将UIView和Headerview嵌入UIScrollView内是一种简单,美观且更好的方法。