我正在使用此tutorial来实现RefreshControl
的pull-to-refresh行为。我使用的是Navigation Bar
。使用普通标题时,一切都很好。但是,当使用“首选大标题”时,它无法正常工作,您可以在以下视频中看到。谁知道为什么?视频之间唯一的变化是故事板检查“首选大标题”。
答案 0 :(得分:8)
答案 1 :(得分:3)
最后对我有用的是:
为了修复RefreshControl进度条消失的大标题错误:
self.extendedLayoutIncludesOpaqueBars = true
为了在refreshcontrol.endRefreshing()
之后修复列表偏移量:
let top = self.tableView.adjustedContentInset.top
let y = self.refreshControl!.frame.maxY + top
self.tableView.setContentOffset(CGPoint(x: 0, y: -y), animated:true)
答案 2 :(得分:3)
如果您使用的是tableView.tableHeaderView = refreshControl
或tableView.addSubView(refreshControl)
,则应尝试使用tableView.refreshControl = refreshControl
答案 3 :(得分:1)
我遇到了同样的问题。在调用其他API之前,请调用refreshControl endRefreshing。
refreshControl.addTarget(controller, action: #selector(refreshData(_:)), for: .valueChanged)
@objc func refreshData(_ refreshControl: UIRefreshControl) {
refreshControl.endRefreshing()
self.model.loadAPICall {
self.tableView.reloadData()
}
}
答案 4 :(得分:1)
对我而言,唯一可行的解决方案是将Bruno's suggestion与以下代码行结合起来:
tableView.contentInsetAdjustmentBehavior = .always
答案 5 :(得分:0)
似乎有很多不同的原因可能导致这种情况发生,对我而言,我在ViewController中嵌入了TableView。 我将表格视图的顶部布局指南设置为超级视图。毕竟,在我将RefreshControl结束编辑包装在延迟的块中之前,一切仍然没有:
DispatchQueue.main.async {
if self.refreshControl.isRefreshing {
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0, execute: {
self.refreshControl.endRefreshing()
})
}
}
答案 6 :(得分:0)
使用XIB唯一对我有用的解决方案是Bruno的解决方案: https://stackoverflow.com/a/54629641/2178888
但是我不想使用XIB。为了使用AutoLayout通过代码实现此目的,我付出了很多努力。
我终于找到了可行的解决方案:
override func loadView() {
super.loadView()
let tableView = UITableView()
//configure tableView
self.view = tableView
}
答案 7 :(得分:0)
如果在UIViewController层次结构中(如在UITableViewController中)将表视图或滚动视图添加为根视图,则可以解决问题
override func loadView() {
view = customView
}
其中customView是UITableView或UICollectionView
答案 8 :(得分:0)
我也遇到了这个问题,我通过将我的scrollView(或tableView \ collectionView)嵌入stackView来解决它,重要的是,这个stackView的顶部约束不会附加到safeArea视图(所有其他约束都可以)。顶部约束应连接到其超级视图或其他视图。
答案 9 :(得分:0)
我长期面对相同的问题,对我来说,唯一可行的解决方案是在tableview的背景视图中添加刷新控件。
tableView.backgroundView = refreshControl
答案 10 :(得分:0)
我通过延迟对API的调用直到集合视图结束减速来解决此问题
我注意到,当集合视图仍在移至其原始位置时刷新控件结束刷新时,就会发生此问题。因此,我将延迟进行API调用,直到我的收藏视图停止移动,也就是减速结束。这是逐步的:
navigationBar.isTranslucent = false
),则必须在视图控制器上设置extendedLayoutIncludesOpaqueBars = true
。否则,请跳过此步骤。RxSwift
,因此,我将按照以下方式进行操作。
collectionView.rx.didEndDecelerating
.map { [unowned self] _ in self.refreshControl.isRefreshing }
.filter { $0 == true }
.subscribe(onNext: { _ in
// make api call
})
.disposed(by: disposeBag)
refreshControl.endRefreshing()
请注意,由于我们延迟了API调用,因此这意味着整个“从上到下刷新”过程的速度不如没有延迟的情况快。