美文网首页
关于UICollectionView 插入子视图在其与cell之

关于UICollectionView 插入子视图在其与cell之

作者: a_只羊 | 来源:发表于2019-08-02 17:43 被阅读0次

    问题

    最近做带有背景游标的标签的时候,使用UICollectionView进行实现过程中,在其View中添加子视图,会盖住Cell,导致Cell展示出问题。而此时的想法目的是要将view作为cell的背景进行展示,百说不如一见,如下截图展示的当前问题:

    问题界面

    原因

    进行了几次尝试之后,发现在collectionView没有显示的时候,是不会进行cell视图的渲染的,也就是说当前的collectionView中没有cell类别的子视图,此时直接加入子视图会在渲染cell类别子视图之前,而当collectionView可见的时候,collectionView再去渲染显示cell(推测系统可能使用insertView:Index:方法),此时让cell层级插入到了UICollectionView与刚刚加到CollectionView视图之间了,进而导致了当前的问题的发生。

    此时CollectionView子视图并没有cell 页面层级

    解决方案

    知道原因了,再去解决这样的问题,就很方便了。我们可以将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进行界面的强制刷新,之后再去插入我们想加入的视图,这样就能将加入的视图放入到UICollectionViewCell之间了,从而达到我们想要的效果。

    最终效果

    相关文章

      网友评论

          本文标题:关于UICollectionView 插入子视图在其与cell之

          本文链接:https://www.haomeiwen.com/subject/jlhrdctx.html