在我的应用程序中,我将刷新控件与集合 View 一起使用。

UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:[UIScreen mainScreen].bounds];
collectionView.alwaysBounceVertical = YES;
...
[self.view addSubview:collectionView];

UIRefreshControl *refreshControl = [UIRefreshControl new];
[collectionView addSubview:refreshControl];

iOS7有一个令人讨厌的错误,当您向下拖动收藏夹 View 并在刷新开始时不松开手指时,垂直contentOffset向下移动20-30点,导致滚动滚动难看。

如果将表与UITableViewController之外的刷新控件一起使用,表也将出现此问题。但是对于他们来说,可以通过将UIRefreshControl实例分配给UITableView的私有(private)属性_refreshControl来轻松解决:
@interface UITableView ()
- (void)_setRefreshControl:(UIRefreshControl *)refreshControl;
@end

...

UITableView *tableView = [[UITableView alloc] initWithFrame:[UIScreen mainScreen].bounds];
[self.view addSubview:tableView];

UIRefreshControl *refreshControl = [UIRefreshControl new];
[tableView addSubview:refreshControl];
[tableView _setRefreshControl:refreshControl];

但是UICollectionView没有这种属性,因此必须有一些手动处理它的方法。

最佳答案

具有相同的问题,并找到了一种解决方法,似乎可以解决该问题。

发生这种情况似乎是因为UIScrollView拖过滚动 View 的边缘时,放慢了平移手势的跟踪。但是,UIScrollView不考虑跟踪期间对contentInset的更改。 UIRefreshControl激活后会更改contentInset,并且此更改导致跳转。

在您的setContentInset上覆盖UICollectionView并考虑这种情况似乎有所帮助:

- (void)setContentInset:(UIEdgeInsets)contentInset {
  if (self.tracking) {
    CGFloat diff = contentInset.top - self.contentInset.top;
    CGPoint translation = [self.panGestureRecognizer translationInView:self];
    translation.y -= diff * 3.0 / 2.0;
    [self.panGestureRecognizer setTranslation:translation inView:self];
  }
  [super setContentInset:contentInset];
}

有趣的是,UITableView通过不拖慢跟踪速度直到您拉PAST刷新控件来解决此问题。但是,我看不到这种行为被暴露出来的方法。

关于ios - iOS7中带有UICollectionView的UIRefreshControl,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19483511/

10-11 15:44