scrollsToTop 和 UIRefreshControl 的错误

Posted

技术标签:

【中文标题】scrollsToTop 和 UIRefreshControl 的错误【英文标题】:Bug with scrollsToTop and UIRefreshControl 【发布时间】:2014-11-20 02:43:26 【问题描述】:

我的 ios 应用程序中有一个错误。我正在使用 UITableView,在其中我实现了一个“拉动刷新”控制器,如下所示:

self.refreshControl = [[UIRefreshControl alloc] init];
self.refreshControl.backgroundColor = [UIColor clearColor];
self.refreshControl.tintColor = [UIColor blackColor];
[self.refreshControl addTarget:self
                            action:@selector(loadTheXML)
                  forControlEvents:UIControlEventValueChanged];

但是,我有一个小错误。如果我向下滚动表格,并且如果我点击状态栏以滚动到表格顶部,则会部分显示刷新控制器。这是正在发生的事情的 GIF:gif link.

如果我使用此刷新控制器一次,则该错误不再发生,当我点击状态栏时,它会滚动到表格顶部。

关于如何修复此错误的任何想法?

【问题讨论】:

你在使用 UITableViewController 吗? 是的,我正在使用 UITableViewController。 也许你调用了beginRefreshing,但没有调用endRefreshing 我正在使用 endRefreshing。这发生在应用程序启动时。所以我没有使用刷新控制器。 【参考方案1】:

我遇到了同样的错误,并且只有当您有一个属性标题时才会发生这种情况。它也会发生,如果我第一次点击搜索栏,结果是一样的。 这是一个对我有用的解决方法:

- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView

     if(self.refreshControl!=nil)
     
          [self.refreshControl beginRefreshing];
          [self.refreshControl endRefreshing];
     
     return scrollView.scrollsToTop;

【讨论】:

【参考方案2】:

稍微改进的 AlexeyIS 解决方法版本将只调用该代码一次:

- (void)awakeFromNib 
    super.awakeFromNib();

    if (self.refreshControl != nil) 
        [self.refreshControl beginRefreshing];
        [self.refreshControl endRefreshing];
    

【讨论】:

【参考方案3】:

我也遇到了同样的问题。在我的代码中,我正在重新加载 UITableView,然后为刷新控件设置属性标题。

解决方法是先设置刷新控件的标题,然后重新加载UITableView。

【讨论】:

以上是关于scrollsToTop 和 UIRefreshControl 的错误的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式点击状态栏后如何触发“scrollsToTop”?

scrollsToTop 不适用于简单的 Master-Detail iOS 应用程序

iOS7 UITableView scrollsToTop 不起作用 [重复]

包含多个并排表格视图时,Scrollview scrollsToTop 不起作用?反复搜索过

MFsidemenu 禁用滚动表视图

点击状态栏不会将表格视图滚动到顶部