UITableView的拖动距离,UIRefreshControl(UITableView drag

2019-09-01 21:20发布

我在上一个UITableView实施UIRefreshControl一些麻烦。

一切工作正常,除了一个事实,我要像滚动屏幕的80%后话了UIRefreshControl到被触发。 有时候,我甚至能够触发它,因为没有在屏幕上,当手指到达它这将取消滚动运动底部的标签栏。

我看其他的应用程序,也就是苹果的“邮件”,其中UIRefreshControl正在滚动只有30%的画面后触发。

我在想什么? 真的需要在这一个帮助!

提前致谢

Answer 1:

我有一个类似的问题,它很可能这对你同样的原因。 对我来说,碰巧我墙根的滚动指示让我无法看到问题的明显原因: UIScrollView的高度比它大得多superView ...

仔细检查您UIScrollView的高度,因为‘拖距离’这只是高度的百分比。 也是一样UITableView也一样,因为它是一个子类的UIScrollView

编辑:看来,这不是重现此问题的唯一方法,因为所需的拖动距离触发复习的童车的方式进行计算。 请参阅此问题的更多信息。

但总的来说它会发生,如果你UIScrollView的身高比他的父容器不同(例如屏幕本身)。



Answer 2:

你可能需要在处理您刷新据此,因为UIRefreshControl不能修改无法使用UIRefreshControl,只是利用scrollViewDidScroll(或tableViewDidScroll如果的tableView)。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if ((scrollView.contentOffset.y + scrollView.frame.size.height) >=    scrollView.contentSize.height)
    {
        // Refresh from here
    }
}


Answer 3:

一些广泛的测试,并与UIKit的玩弄后,我得出了一个结论。

TL; DR

UIRefreshControl是不够聪明。 要解决在添加此代码viewDidAppearviewDidLayoutSubviews

let refreshControl = scrollView.refreshControl
scrollView.refreshControl = nil
scrollView.refreshControl = refreshControl

测试设置

UIViewController与一个故事板UIView作为其view这反过来具有UIScrollView作为其又具有单个子视图仅UIView与子视图top,right,bottom,left,width,height约束等于superview 。 该的viewController有自由尺寸1200p的高度。

在子类UIViewController一个UIRefreshControl通过设置附加UIScrollView#refreshControl到一个新的UIRefreshControl里面viewDidLoad

当运行在一个应用程序iPhone X simulator和拖动滚动视图来执行“拉刷新”一个人必须拖动相当长的时间,使动画refreshControl并发送其通知就被推倒。

问题

我的一个假设是, UIRefreshControl获得其dragging distance设置,一旦它被添加到滚动视图和自AutoLayout在hasen't更新根视图的子视图viewDidLoad滚动视图具有的高度1180.0p而不是正确的768.0p因此refreshControl的dragging distance将被计算为高度1180.0p代替768.0p ,因此在运行应用程序时变得比预期更长。

解决方案

通过为滚动视图正确的尺寸之后更新了滚动的refreshControl已设置的计算正确的拖动距离。

此更新的发生在所述滚动视图的正确大小已被计算出的函数,例如viewDidAppearviewDidLayoutSubviews

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    let refreshControl = scrollView.refreshControl
    scrollView.refreshControl = nil
    scrollView.refreshControl = refreshControl
}


文章来源: UITableView dragging distance with UIRefreshControl