Swift 喜欢大标题和刷新控件,但效果不好
我使用它来实现Swift 喜欢大标题和刷新控件,但效果不好,swift,xcode,uitableview,uinavigationbar,uirefreshcontrol,Swift,Xcode,Uitableview,Uinavigationbar,Uirefreshcontrol,我使用它来实现RefreshControl的拉入刷新行为。我正在使用导航栏。当使用普通标题时,一切都很好。但是,当使用“更喜欢大标题”时,它无法正常工作,正如您在以下视频中看到的那样。有人知道为什么吗?视频之间唯一的变化是“更喜欢大标题”上的情节提要检查 最后,对我有用的是: 要修复RefreshControl进度条消失的大标题错误,请执行以下操作: self.extendedLayoutIncludesOpaqueBars = true 要在refreshcontrol.endRefr
RefreshControl
的拉入刷新行为。我正在使用导航栏
。当使用普通标题时,一切都很好。但是,当使用“更喜欢大标题”时,它无法正常工作,正如您在以下视频中看到的那样。有人知道为什么吗?视频之间唯一的变化是“更喜欢大标题”上的情节提要检查
最后,对我有用的是:
- 要修复RefreshControl进度条消失的大标题错误,请执行以下操作:
self.extendedLayoutIncludesOpaqueBars = true
- 要在
refreshcontrol.endRefresh()之后修复列表偏移量,请执行以下操作:
tableView.tableHeaderView=refreshControl
或tableView.addSubView(refreshControl)
您应该尝试使用tableView.refreshControl=refreshControl
我遇到了同样的问题,其他答案对我都不起作用
我意识到,将“表视图顶部”约束从“安全区域”更改为“超级视图”,修复了这个奇怪的旋转错误
此外,请确保该约束的常量值为0似乎有许多不同的原因可能导致这种情况发生,对我来说,我在ViewController中嵌入了一个TableView我使用0将tableview的顶部布局指南设置为superview。在所有这些之后,直到我将我的RefreshControl结束编辑打包到一个延迟块中,我仍然什么都没有:
DispatchQueue.main.async {
if self.refreshControl.isRefreshing {
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0, execute: {
self.refreshControl.endRefreshing()
})
}
}
使用XIBs对我有效的唯一解决方案是Bruno的一个: 但是,我不想使用XIB。为了通过使用AutoLayout编写代码来实现这一点,我做了很多努力 我终于找到了一个有效的解决方案:
override func loadView(){
super.loadView()
让tableView=UITableView()
//配置tableView
self.view=tableView
}
如果在UIViewController层次结构(如UITableViewController)中添加tableview或scroll view作为根视图,则问题可以解决
当customView是UITableView或UICollectionView时,我也有这个问题,我通过在stackView中嵌入我的scrollView(或tableView\collectionView)修复了它,重要的是这个stackView的顶部约束不会附加到safeArea视图(所有其他约束都可以)。顶部约束应该是连接到它的superview或其他视图。我也遇到了同样的问题。在调用进一步的API之前调用refreshControl EndRefresh
refreshControl.addTarget(controller, action: #selector(refreshData(_:)), for: .valueChanged)
@objc func refreshData(_ refreshControl: UIRefreshControl) {
refreshControl.endRefreshing()
self.model.loadAPICall {
self.tableView.reloadData()
}
}
对我来说,唯一可行的解决方案是结合以下代码行:
tableView.contentInsetAdjustmentBehavior=.always
很长一段时间以来,我一直面临着同样的问题,唯一可行的解决方案是在tableView的背景视图中添加刷新控件
tableView.backgroundView = refreshControl
简短回答
我通过延迟调用API直到集合视图停止减速来修复这个问题
长话短说
我注意到,当刷新控件结束刷新,而集合视图仍在向上移动到其原始位置时,就会出现问题。因此,我延迟进行API调用,直到我的集合视图停止移动,即停止减速。这里有一个逐步的步骤:
navigationBar.isTranslucent=false
),则必须在视图控制器上设置ExtendedLayoutCludeSopaqueBars=true
)。否则,跳过这个RxSwift
,下面是我的操作方法collectionView.rx.didend正在减速
.map{[unowned self]\在self.refreshControl.isRefreshing}
.filter{$0==true}
.subscribe(onNext:{uu}in
//进行api调用
})
.处置(由:处置人)
refreshControl.endRefreshing()
警告
请注意,由于我们延迟了API调用,这意味着整个pull-to-refresh过程并没有在没有延迟的情况下完成的那么快。这有帮助吗?如果您有不透明的选项卡栏,并且self.extendedlayoutincludesopaquebar=true使所有内容都位于选项卡栏下,并且您不希望出现这种行为,那么您可以添加“self.edgesForExtendedLayout=uirectredge.top”第一部分帮助了我!在修复列表偏移量之前,请检查是否缺少对tableView.reloadData()的调用,例如,如果更新tableHeaderView,则应在更新之后立即调用reloadData()。从早上开始就一直在努力,这是唯一对我有效的解决方案(iOS 12.1)。谢谢也为我工作,有一周的时间找到解决方案。谢谢谢谢你,伙计,这对我也有用!我有这个bug已经有大约一年了,将它与:tableView.contentInsetAdjustmentBehavior=。结合起来,我总是不得不使用这个解决方案,这确实让我感觉有点不舒服。我成功地将+1.0降低到+0.2谢谢!如果没有这行代码,Bruno的建议会导致
UIScrollView.ScrollStop
出现问题。(注意:您也可以在“尺寸检查器”窗格的IB中设置此选项。)
refreshControl.addTarget(controller, action: #selector(refreshData(_:)), for: .valueChanged)
@objc func refreshData(_ refreshControl: UIRefreshControl) {
refreshControl.endRefreshing()
self.model.loadAPICall {
self.tableView.reloadData()
}
}
tableView.backgroundView = refreshControl