问题
最近做带有背景游标的标签的时候,使用UICollectionView
进行实现过程中,在其View中添加子视图,会盖住Cell
,导致Cell
展示出问题。而此时的想法目的是要将view
作为cell
的背景进行展示,百说不如一见,如下截图展示的当前问题:
原因
进行了几次尝试之后,发现在collectionView
没有显示的时候,是不会进行cell视图
的渲染的,也就是说当前的collectionView
中没有cell类别的子视图,此时直接加入子视图会在渲染cell类别子视图之前,而当collectionView
可见的时候,collectionView
再去渲染显示cell
(推测系统可能使用insertView:Index:方法),此时让cell
层级插入到了UICollectionView
与刚刚加到CollectionView
视图之间了,进而导致了当前的问题的发生。
解决方案
知道原因了,再去解决这样的问题,就很方便了。我们可以将View
的添加放在渲染cell
之后,这样就能避免系统渲染cell
影响我们视图的层级结构导致画面被遮挡的问题了。
[self.topTagCollectionView reloadData];
//强制刷新页面
[self.topTagCollectionView layoutIfNeeded];
//获取第一个cell在CollectionView的坐标
UICollectionViewCell *cell = [self.topTagCollectionView cellForItemAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
CGRect idcadorViewLocation = [self.topTagCollectionView convertRect:cell.frame toView:self.topTagCollectionView];
self.idcadorView.frame = idcadorViewLocation;
self.idcadorView.layer.cornerRadius = idcadorViewLocation.size.height * 0.5;
//将背景View插入到UICollectionView与Cell之间
[self.topTagCollectionView insertSubview:self.idcadorView atIndex:0];
在进行CollectionView
reload之后,我们可以强制CollectionView
渲染界面,使用 layoutIfNeeded
进行界面的强制刷新,之后再去插入我们想加入的视图,这样就能将加入的视图放入到UICollectionView
与 Cell
之间了,从而达到我们想要的效果。