iOS UITableView在过滤时滚动插入

时间:2018-05-30 15:23:51

标签: ios uitableview uiscrollview

我在UITableView滚动方面遇到了一些问题。这是我的简单屏幕,我有UITextField和UITableView与单元格。当用户在UITextField应用程序中键入内容时,过滤项目列表并重新加载UITableView。它正在按预期工作。

enter image description here

在右侧屏幕上,您可以看到滚动时UITableView的外观。单元格位于UITextField下。

假设我滚动了一些单元格,如果我开始在UITextField中输入内容,我会得到过滤单元格的列表,但其中一些在UITextField下,我无法向下滚动。

enter image description here

2 个答案:

答案 0 :(得分:1)

默认情况下,当您使用新的行数据集重新加载表时,表的滚动偏移量不会发生变化。重新加载表格后需要滚动到顶部:

self.tableView.scrollToRow(at: IndexPath(row: 0, section: 0),
                                   at: .top,
                                   animated: true)

如果您没有默认的占位符单元格来代表"没有匹配结果"如果没有结果,因此没有单元格代表索引(0,0),那么在上述代码之前添加以下条件以保护崩溃:

guard cellResults.count > 0 else { return }

答案 1 :(得分:0)

首先,你的UITextField包含在tableview标题视图中? UITableView需要滚动表还是不滚动? 如果你需要在用户在UITextField中输入内容时总是显示第一个单元格,我推荐使用RxSwift这样的

textField
    .rx.text
    .orEmpty
    .debounce(0.1, scheduler: MainScheduler.instance)
    .distinctUntilChanged()
    .subscribe(onNext: { [unowned self] query in
        //TODO: Do something with you table, for example 
        // self.tableView.scrollToRow(at: IndexPath(row: 0, section: 0), at: .top, animated: true)
        // or update tableView. 
    })
    .disposed(by: disposeBag)