ios - ScrollView 内的 UITableView 无限滚动

标签 ios swift uitableview uiscrollview

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

另外:一开始tableView是空的,因为它的数据源是空的。当用户在 UIView 中点击一个按钮时,数据源完成并 tableview 刷新数据。

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

anchor :

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()
}

表格 View 函数:

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 禁用了用户交互。
  • 一旦用户向上滑动屏幕。 view 通过离开屏幕动画隐藏自己,tableView 占据整个屏幕。
  • 现在,tableView 再次启用了用户交互,它的功能与普通 tableView 一样。
  • 一旦用户尝试向下滚动,甚至在到达 tableView 的顶部后,view 将动画回到该位置并且 parentView 返回到原来的样子.

关于ios - ScrollView 内的 UITableView 无限滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51172897/

相关文章:

ios - firebase/swift 4 - 等到 firebase 完成配置

swift - 快速映射抛出函数-两次尝试

ios - 删除 UISearchBar 中搜索图标的动画

ios - 防止 UITableViewCells 在平移时突出显示

ios - 在 iOS 中,alpha 为 0.5 的 shadowColor 和设置为 0.5 的 shadowOpacity 有区别吗?

ios - NSBundle bundleWithIdentifier 为静态框架和资源包返回 null

ios - 可以异步加载 UILabel/UITextView 的 NSAttributesString(从 HTML 生成)中的图像(iOS 7+)吗?

ios - 如何在 UIBezierPath 上绘制文本?

ios - 使用 UIImage 滚动时 TableView 单元格滞后

ios - Swift 3 - 如何在 moveRowAt IndexPath 之前触发 textFieldDidEndEditing?