Hey StackOverflow People,
我一直试图弄清楚这个问题已经有一段时间但无济于事,我需要一些帮助。我有一个UITableView
靠近我的应用程序底部,并且用户没有足够的屏幕距离来进行刷新。有人知道如何缩短在UIRefreshControl
和UITableView
上激活拉动刷新操作(通过iOS 6/7中的UIWebView
)所需的距离吗?
先谢谢大家!
答案 0 :(得分:30)
你仍然可以使用refreshControl但有一些修改!
将这些代码添加到viewController:
self.refreshControl.endRefreshing()
和往常一样,在self.refresh()函数的刷新逻辑结束时添加:
SELECT
答案 1 :(得分:11)
根据Apple文档,我看不到任何修改UIRefreshControl
参数的方法
链接:https://developer.apple.com/library/ios/documentation/uikit/reference/UIRefreshControl_class/Reference/Reference.html
使用ODRefreshControl之类的第三方组件(自定义滚动距离以激活刷新,修改 #define kMaxDistance
常数)。
请勿使用UIRefreshControl
,而是在-scrollViewDidScroll
方法中实现自己的逻辑,如:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if ((scrollView.contentOffset.y + scrollView.frame.size.height) >= scrollView.contentSize.height) {
//refresh logic
}
}
答案 2 :(得分:0)
您可以进行一些修改使其正确
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的答案的帮助下编写了这段代码
答案 3 :(得分:0)
对于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
}
}
答案 4 :(得分:-1)
该值是_snappingHeight
,您可以将其设置为所需的值:
refreshControl.setValue(100, forKey: "_snappingHeight")