2015-12-14 30 views
1

我用下面的代码来创建UIRefreshControlUIRefreshControl显示上述UICollectionViews细胞

_refreshControl = new UIRefreshControl(); 
_refreshControl.ValueChanged += RefreshTriggered; 
_collectionView.InsertSubview(_refreshControl, 0); 

而我没有,为什么UIRefreshControl被绘制在UICollectionViewCell小号任何想法。

这里是当我刚添加的刷新控制的UICollectionView的子视图:

[0]: {<UIRefreshControl: 0x7c132fe0; frame = (0 0; 594 60); hidden = YES; autoresize = W; layer = <CALayer: 0x7c133250>>} 
[1]: {<UIImageView: 0x79f8a5d0; frame = (3 588.5; 588 2.5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x79f89a70>> - (null)} 
[2]: {<UIImageView: 0x79fab7d0; frame = (588.5 584; 2.5 7); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x796171f0>> - (null)} 

这里是当项目在UICollectionView加载的子视图:

[0]: {<MovieCollectionViewCell: 0x796e7350; baseClass = UICollectionViewCell; frame = (0 0; 183 278.16); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x7c244bc0>>} 
[1]: {<MovieCollectionViewCell: 0x7c2b5850; baseClass = UICollectionViewCell; frame = (186 0; 183 278.16); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x7c2b5950>>} 
[2]: {<MovieCollectionViewCell: 0x7c2ba7d0; baseClass = UICollectionViewCell; frame = (0 281; 183 278.16); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x7c2ba8d0>>} 
[3]: {<MovieCollectionViewCell: 0x7c2bf440; baseClass = UICollectionViewCell; frame = (186 281; 183 278.16); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x7c2bf540>>} 
[4]: {<MovieCollectionViewCell: 0x7c2c42d0; baseClass = UICollectionViewCell; frame = (0 562.5; 183 278.16); clipsToBounds = YES; hidden = YES; opaque = NO; layer = <CALayer: 0x7c2c43d0>>} 
[5]: {<MovieCollectionViewCell: 0x7c2c9160; baseClass = UICollectionViewCell; frame = (186 562.5; 183 278.16); clipsToBounds = YES; hidden = YES; opaque = NO; layer = <CALayer: 0x7c2c9260>>} 
[6]: {<UIRefreshControl: 0x7c132fe0; frame = (0 -69.5; 369 60); autoresize = W; layer = <CALayer: 0x7c133250>>} 
[7]: {<UIImageView: 0x7c159e80; frame = (3 522; 363 2.5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x7c159fb0>> - (null)} 
[8]: {<UIImageView: 0x7c15a480; frame = (363.5 -66.5; 2.5 224); opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x7c15a5b0>> - (null)} 

任何人的想法?

回答

5

尝试发送refreshControll布局过程后回这样的:

- (void)viewDidLayoutSubviews 
{ 
    [super viewDidLayoutSubviews]; 

    [self.collectionView sendSubviewToBack:self.refreshControl]; 
} 

因为UITableViewUICollectionView重用他们的细胞,他们奠定了其子视图(可能通过自定义实现的一个非常具体的方式的layoutSubviews)。因此,插入自定义子视图的位置在布局过程后通常不会保留。这就是为什么你必须重写viewDidLayoutSubviews并将视图放回到你想要的位置。

UIRefreshControllUITableView自动检测到并放回到其他子视图的后面,但不是UICollectionView的情况,您必须手动执行此操作。对于任何其他自定义子视图,您都必须为UITableViewUICollectionView执行此操作。

+0

那么这个工作,我打算把它标记为已解决,但我想看看为什么发生这种情况的解释。我认为这是Xamarin或iOS中的一个错误。 – vrwim

+0

看我的编辑。只要我记得,事情一直在以这种方式工作,所以我不会把它称为一个错误,只是你需要知道的东西...... – deadbeef