拉来刷新在UICollectionViewController(Pull-to-refresh in

2019-08-01 23:22发布

我想实现下拉到刷新在UICollectionViewController的iOS 6下,这是很容易实现具有UITableViewController ,就像这样:

UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
[refreshControl addTarget:self action:@selector(startRefresh:)
    forControlEvents:UIControlEventValueChanged];
self.refreshControl = refreshControl;

以上实现了一个很好的液体滴的动画作为本地插件的一部分。

作为UICollectionViewController是一个“更加进化” UITableViewController人们所期望的有些功能奇偶校验的,但我不能在任何地方找到一个参考内置的方式来实现这一点。

  1. 有一个简单的方法来做到这一点,我俯瞰?
  2. 可以UIRefreshControl某种方式使用UICollectionViewController尽管报头和文档都指出它的意思与表视图中使用?

Answer 1:

这两个问题的答案(1)和(2)是肯定的。

只需添加一个UIRefreshControl实例作为一个子视图.collectionView ,它就可以工作。

UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
[refreshControl addTarget:self action:@selector(startRefresh:)
    forControlEvents:UIControlEventValueChanged];
[self.collectionView addSubview:refreshControl];

而已! 我希望这个曾在文件中被提及的地方,尽管有时一个简单的实验做的伎俩。

编辑:如果集合是不够大,有一个活跃的滚动条,该解决方案将无法工作。 如果添加了这种说法,

self.collectionView.alwaysBounceVertical = YES;

那么一切都完美的作品。 取自此修复另一篇关于同一主题(在其他发布答案的注释中引用)。



Answer 2:

我一直在寻找同样的解决方案,但是在斯威夫特。 基于上面的回答,我也做了以下内容:

let refreshCtrl = UIRefreshControl()
    ...
refreshCtrl.addTarget(self, action: "startRefresh", forControlEvents: .ValueChanged)
collectionView?.addSubview(refreshCtrl)

不忘:

refreshCtrl.endRefreshing()


Answer 3:

我用故事板和设置self.collectionView.alwaysBounceVertical = YES; 不工作。 选择BouncesBounces Vertically做这项工作对我来说。



Answer 4:

refreshControl物业现已添加到UIScrollView作为iOS的10,所以你可以在收集意见直接设置刷新控制。

https://developer.apple.com/reference/uikit/uiscrollview/2127691-refreshcontrol

UIRefreshControl *refreshControl = [UIRefreshControl new];
[refreshControl addTarget:self action:@selector(refreshControlAction:) forControlEvents:UIControlEventValueChanged];
self.collectionView.refreshControl = refreshControl;    


Answer 5:

MJH的答案是正确的。

我跑进问题,即如果该collectionView.contentSize没有那么大的collectionView.frame.size ,你不能得到collectionView滚动。 你不能设置contentSize属性是(至少我做不到)。

如果不能滚动,它不会让你拉来刷新。

我的解决办法是子类UICollectionViewFlowLayout并在此改变方法:

- (CGSize)collectionViewContentSize
{
    CGFloat height = [super collectionViewContentSize].height;

    // Always returns a contentSize larger then frame so it can scroll and UIRefreshControl will work
    if (height < self.collectionView.bounds.size.height) {
        height = self.collectionView.bounds.size.height + 1;
    }

    return CGSizeMake([super collectionViewContentSize].width, height);
}


文章来源: Pull-to-refresh in UICollectionViewController