嘿,StackOverflow的人,
我已经尝试解决这个问题已有一段时间了,但无济于事,我需要一些帮助。我的应用程序底部靠近UITableView
,并且屏幕距离不足,用户无法进行刷新。有人知道我该如何缩短在UIRefreshControl
和UITableView
内对UIWebView
进行拉动刷新动作所需的距离?
提前感谢大家!
您仍然可以使用refreshControl,但要进行一些修改!
将这些代码添加到您的viewController:
var canRefresh = true
override func scrollViewDidScroll(scrollView: UIScrollView) {
if scrollView.contentOffset.y < -100 { //change 100 to whatever you want
if canRefresh && !self.refreshControl.refreshing {
self.canRefresh = false
self.refreshControl.beginRefreshing()
self.refresh() // your viewController refresh function
}
}else if scrollView.contentOffset.y >= 0 {
self.canRefresh = true
}
}
和往常一样,在self.refresh()函数的刷新逻辑结尾处添加:
self.refreshControl.endRefreshing()
根据Apple Docs,我看不到任何修改UIRefreshControl
参数的方法。链接:https://developer.apple.com/library/ios/documentation/uikit/reference/UIRefreshControl_class/Reference/Reference.html
使用像ODRefreshControl这样的第三方组件(自定义滚动距离以激活刷新,修改 #define kMaxDistance
constant)。
不要使用UIRefreshControl
,而是在-scrollViewDidScroll
方法中实现自己的逻辑,例如:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if ((scrollView.contentOffset.y + scrollView.frame.size.height) >= scrollView.contentSize.height) {
//refresh logic
}
}
您可以通过一些修改使其正确
lazy var refreshControl: UIRefreshControl = {
let refreshControl = UIRefreshControl()
refreshControl.tintColor = UIColor.red
return refreshControl
}()
//refreshControl.addTarget(self, action: #selector(handleRefresh), for: .valueChanged)
每个PullToRefresh必须具有这样的几行代码,即handleRefresh函数,可以执行刷新页面所需的任何操作。
您只需要注释掉addTarget行并将此函数添加到您的代码中```
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView.contentOffset.y < -80 { //change 80 to whatever you want
if !self.refreshControl.isRefreshing {
handleRefresh()
}
}
}
我在Ashkan Ghodrat的回答的帮助下编写了这段代码
对于Swift 3.2及更高版本:
var canRefresh = true
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView.contentOffset.y < -100 {
if canRefresh && !self.refreshControl.isRefreshing {
self.canRefresh = false
self.refreshControl.beginRefreshing()
self.handleRefresh()
}
} else if scrollView.contentOffset.y >= 0 {
self.canRefresh = true
}
}
其值为_snappingHeight
,您可以将其设置为所需的值:
refreshControl.setValue(100, forKey: "_snappingHeight")