UIRefreshControl上UICollectionView只有在收集填充容器的高度工作(UI

2019-07-19 05:02发布

我想要一个添加UIRefreshControlUICollectionView ,但问题是,刷新控制不会出现,除非集合视图填补了其父容器的高度。 换句话说,除非集合的观点是足够长,需要滚动,它不能被拉下,露出刷新控制视图。 只要收集超过其父容器的高度,被推倒并显示刷新视图。

我已经建立了一个快速的iOS项目,只需UICollectionView主视图里面,有出口到集合视图,以便我可以添加UIRefreshControl在它viewDidLoad 。 还有与所述复用标识符的原型细胞cCell

这是在控制器中的所有代码,它说明这个问题非常好。 在该代码中,我设置单元格的高度为100,这是不足以填充显示,因此,视图不能被拉动和刷新控制将不会显示。 将它设置为更高的东西来填补显示,然后它的作品。 有任何想法吗?

@interface ViewController () <UICollectionViewDelegateFlowLayout, UICollectionViewDataSource>
@property (strong, nonatomic) IBOutlet UICollectionView *collectionView;
@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
    [self.collectionView addSubview:refreshControl];
}

-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
    return 1;
}

-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    return 1;
}

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    return [collectionView dequeueReusableCellWithReuseIdentifier:@"cCell" forIndexPath:indexPath];
}

-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    return CGSizeMake(self.view.frame.size.width, 100);
}

Answer 1:

试试这个:

self.collectionView.alwaysBounceVertical = YES;

一个完整的代码UIRefreshControl

UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
refreshControl.tintColor = [UIColor grayColor];
[refreshControl addTarget:self action:@selector(refershControlAction) forControlEvents:UIControlEventValueChanged];
[self.collectionView addSubview:refreshControl];
self.collectionView.alwaysBounceVertical = YES;


Answer 2:

属性/滚动查看/垂直弹跳在情节提要/ XIB



Answer 3:

拉里的答案迅速:

    let refreshControl = UIRefreshControl()
    refreshControl.tintColor = UIColor.blueColor()
    refreshControl.addTarget(self, action: "refresh", forControlEvents: .ValueChanged)
    collectionView.addSubview(refreshControl)
    collectionView.alwaysBounceVertical = true

斯威夫特3:

    let refreshControl = UIRefreshControl()
    refreshControl.tintColor = .blue
    refreshControl.addTarget(self, action: #selector(refresh), for: .valueChanged)
    collectionView.addSubview(refreshControl)
    collectionView.alwaysBounceVertical = true


Answer 4:

如果您collectionview有内容的大小足够大的垂直滚动,这是确定的,但在你的情况不是这样的。

您必须启用属性AlwaysBounceVertical ,所以你可以设置self.collectionView.alwaysBounceVertical = YES;



Answer 5:

我也正面临着同样的问题,我是不是能够使用UIRefreshControl直到UICollectionView的内容尺寸足够大,以垂直滚动,

设定bounces的性质UICollectionView解决了这个

[self.collectionView setBounces:YES];
[self.collectionView setAlwaysBounceVertical:YES];


Answer 6:

我打电话beginRefreshing()之后viewDidLoad()但有些画面中这是行不通的。 而且,只有collectionView.layoutIfNeeded()viewDidLoad()帮助我



文章来源: UIRefreshControl on UICollectionView only works if the collection fills the height of the container