UICollectionView.backgroundView是否已损坏

时间:2014-04-14 12:13:19

标签: ios objective-c uicollectionview

我写的东西比较简单,或者我想。

首先,代码,如果我的服务器没有返回任何结果,我试图将图像放在UICollectionView的背景上。图像是200乘200:

UIView *myView = [[UIView alloc] initWithFrame:self.view.bounds];
CGRect myViewSpace = self.view.bounds;
CGFloat myX = (myViewSpace.size.width /2.0) - 100;
CGFloat myY = (myViewSpace.size.height /2.0) - 100;
UIImageView *imView = [[UIImageView alloc] initWithFrame:CGRectMake(myX, myY, 200, 200)];
imView.image = [UIImage imageNamed:@"imNotHome"];
[myView addSubview:imView];
myCollectionView.backgroundView = myView;

一旦有结果,我希望能够删除它。

在我重新加载UICollectionView之前,我认为它就像放置以下内容一样简单:

[myCollectionView.backgroundView removeFromSuperview];

但是,似乎什么也没做。

我错过了什么吗?

提前致谢!

1 个答案:

答案 0 :(得分:2)

应该这样做:

myCollectionView.backgroundView = nil;

说明:您应该以与设置相同的方式取消设置UICollectionView的背景。您没有通过操纵视图层次结构来设置它,而是通过设置background属性来设置它。您确实在上一行中调用了addSubview,但那是为您的背景视图添加子视图,而不是添加背景视图本身。

修改

这里有关于此UICollectionView错误的非常好的文章: http://blog.spacemanlabs.com/2013/11/uicollectionviews-backgroundview-property-is-horribly-broken/

作者提供的解决方案是将背景重置为空的不透明视图:

UIView *blankView = [UIView new];
blankView.backgroundColor = [UIColor whiteColor];
[myCollectionView.backgroundView removeFromSuperview];
myCollectionView.backgroundView = blankView;

此外,作者建议不要使用backgroundView属性,而是自己动手:

  

坦率地说,我认为最好的解决方案就是一起忽略backgroundView属性。相反,使集合视图的背景清晰,并实现自己的backgroundView;只是在集合视图后面抛出一个视图。