我有一个UICollectionView,我试图根据CollectionView中是否有任何数据使用backgroundView属性设置背景图像.我有导航将更改数据,并重新加载集合视图(调用[self.collectionView reloadData]).出于某种原因,我得到了非常奇怪的结果.首先,有时当我设置属性时,它会出现在collectionView单元格的顶部并遮挡它们.其次,当我尝试更改属性时,它不会在屏幕上更改.
这让我疯了!实施起来似乎很简单!
这让我疯了!实施起来似乎很简单!
所以在Code中.用于UICollectionViewController的InviewDidLoad
- (void)viewDidLoad { [self loadSections]; [self setupBackgroundView; }
Load sections方法只是加载我用于集合视图的数据,然后它还调用一个方法来设置背景视图,根据下面是否有任何数据来决定要添加的视图:
- (void)loadSections { [self loadPictures]; [self setupBackgroundImage]; } - (void)setupBackgroundImage { if ([self.sections count] == 0 || !self.sections) { self.collectionView.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"TakePhoto"]]; } else { self.collectionView.backgroundView = nil; } }
现在,当视图首次加载时,如果没有数据,因此没有单元格显示背景图像正确显示.然后我改变了数据,现在我要显示一些单元格,调用setupBackgroundImage,我可以验证backgroundImage属性是否设置为nil(我甚至在此处进行了断点检查并检查了值,它是nil).但背景图像仍然可见.
此外,如果我将nil更改为另一个图像,则不会显示此新图像.
而且更奇怪.如果我显示了一些单元格并设置了背景图像,则此图像会整齐地显示在单元格后面.如果我然后使用新数据集重新加载数据,则图像将显示在单元格前面,遮挡它们.我不知道这是怎么发生的,因为后台视图应该落后于所有其他人.
有谁知道为什么会这样.是否在任何地方缓存?或者我只是做些傻事?我在这里完全失去了 – 花了更多的时间在这上面而不是编写它使用的自定义布局!
解决方法
试试这个
self.collectionView.backgroundView =[[UIView alloc]initWithFrame:self.collectionView.bounds]; UIImageView *imgVW=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"TakePhoto"]]; [self.collectionView.backgroundView addSubView:imgVW];