我想实现下拉到刷新在UICollectionViewController
的iOS 6下,这是很容易实现具有UITableViewController
,就像这样:
UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
[refreshControl addTarget:self action:@selector(startRefresh:)
forControlEvents:UIControlEventValueChanged];
self.refreshControl = refreshControl;
以上实现了一个很好的液体滴的动画作为本地插件的一部分。
作为UICollectionViewController
是一个“更加进化” UITableViewController
人们所期望的有些功能奇偶校验的,但我不能在任何地方找到一个参考内置的方式来实现这一点。
- 有一个简单的方法来做到这一点,我俯瞰?
- 可以
UIRefreshControl
某种方式使用UICollectionViewController
尽管报头和文档都指出它的意思与表视图中使用?
这两个问题的答案(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;
那么一切都完美的作品。 取自此修复另一篇关于同一主题(在其他发布答案的注释中引用)。
我一直在寻找同样的解决方案,但是在斯威夫特。 基于上面的回答,我也做了以下内容:
let refreshCtrl = UIRefreshControl()
...
refreshCtrl.addTarget(self, action: "startRefresh", forControlEvents: .ValueChanged)
collectionView?.addSubview(refreshCtrl)
不忘:
refreshCtrl.endRefreshing()
我用故事板和设置self.collectionView.alwaysBounceVertical = YES;
不工作。 选择Bounces
和Bounces Vertically
做这项工作对我来说。
该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;
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);
}