美文网首页
iOS Storyboard中UICollectionView

iOS Storyboard中UICollectionView

作者: 圆脸黑猫警长 | 来源:发表于2019-03-14 12:13 被阅读0次
    Coding every day

    tableView自带headerView的属性,用起来非常方便,但是想给collectionView添加header就比较麻烦了。
    本文将讨论给collectionView 通过storyboard的方式添加header,并让header可以动态变高,真正做到可见即可得,高度可定制化的效果。

    下面是具体步骤。

    步骤1.

    首先在storyboard中添加一个collectionView,添加一个collectionViewCell。设置UI,datasource,delegate等,先让正常的能显示出来

    步骤2.

    创建一个类,继承UICollectionReusableView,这个类就是headerView的类。

    步骤3.

    在storyboard中拖一个CollectionReusableView到collectionView上,将其类设定为步骤2中创建的类,再设置UI连线等和设置cell一样


    CollectionReusableView.jpg

    步骤4.

    增加代理方法返回这个view,类似cell的重用

    -(UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
    {
    HeaderView *headerV = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:NSStringFromClass([HeaderView class]) forIndexPath:indexPath];
    return headerV;
    }

    步骤5.设定headerView的高度

    注意,headerView的高度通过layout去设定。 layout.headerReferenceSize = CGSizeMake(Screen_Width, 200);

    如何动态对headerView变高?

    在需要的时候重新对步骤5中的layout进行赋值即可,但是layout应通过Collection去获取,而不是重新创建。

    UICollectionViewFlowLayout *layout = (id)self.collectionView.collectionViewLayout;
    layout.headerReferenceSize = CGSizeMake(Screen_Width, 高度);
    self.collectionView.collectionViewLayout = layout;

    应用场景

    比如headerView里面放了一个webview,需要让headerView和webView的内容等高,这样webview就让完全显示出来。这样的需求可以给headerView加一个代理,在webView的内容高度变化后回调到VC中,然后VC中再动态设置layout即可。(webView的内容高度可用动态KVO监听)

    相关文章

      网友评论

          本文标题:iOS Storyboard中UICollectionView

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