首页 文章

ScrollView内的UITableView具有无限滚动

提问于
浏览
1

我有一个由两个元素组成的屏幕( UIViewUITableView ) . 当用户滚动屏幕时,我希望 UIView 离开屏幕(顶部)并且 UITableView 开始滚动 . 我为 UIView 设定了一个固定的高度,并为 UITableViewCells '. In addition I' m设置了底部和顶部锚点的固定高度,但 UITableView 不为't show if I don' t给出 UITableView 的特定高度 . 如果我为 UITableView 提供特定高度,它只显示一些单元格 .

另外:首先tableView是空的,因为它的数据源是空的 . 当用户点击UIView内的按钮时,数据源会完成并查看tableview刷新数据 .

我有些帖子但是所有帖子都说为UITableView提供了固定的高度 . 我不知道如何显示所有固定高度的细胞 . 例如:Dynamic height TableView in a Scroll View

Anchors:

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)

How I declare 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 Functions:

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 回答

  • 1

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

    • 开头的 tableView 禁用了用户交互 .

    • 一旦用户向上滑动屏幕 . view 动画以通过离开屏幕隐藏自己, tableView 占据整个屏幕 .

    • 现在再次在 tableView 上启用用户交互,它的功能类似于普通的tableView .

    • 一旦用户在到达 tableView 的顶部后尝试向下滚动, view 将动画回到该位置,而parentView将返回到原来的状态 .

    我希望这种方法适合您的需要 .

  • 0

    您需要更改为此类设计设计应用程序UI的方法 . 对于当前的设计,您正在使用headerview创建UITableview是简单,漂亮和更好的方法,然后在UIScrollView中嵌入UIView和UITableview .

相关问题