ios – 如何在自定义UICollectionViewCell和CollectionViewLayout中使用rbcollectionviewinfofolderlayout

ios – 如何在自定义UICollectionViewCell和CollectionViewLayout中使用rbcollectionviewinfofolderlayout,第1张

概述我想要做的是在选择此单元格时在UICollectionViewCell内显示UICollectionView.我想使用 rbcollectionviewinfofolderlayout折叠我的集合视图并在其中显示一个新的集合视图.但是,我不确定如何将其实现到现有代码中.我在一个视图中有三个集合视图.我根据用户的选择隐藏和取消隐藏我的观点.我为集合视图中的单元格使用自定义单元格xib,并且我有一个自 我想要做的是在选择此单元格时在UICollectionVIEwCell内显示UICollectionVIEw.我想使用 rbcollectionviewinfofolderlayout折叠我的集合视图并在其中显示一个新的集合视图.但是,我不确定如何将其实现到现有代码中.我在一个视图中有三个集合视图.我根据用户的选择隐藏和取消隐藏我的观点.我为集合视图中的单元格使用自定义单元格xib,并且我有一个自定义collectionvIEwflowlayout,确保在设备的宽度中始终显示3个单元格.

这就是我的视图控制器的样子.

在我的vIEwDIDLoad中,我必须将RBCollectionVIEwInfoFolderLayout设置为我的collectionvIEw.正如您所看到的,布局变量包含我的CustomCollectionVIEwFlow,我在实现RBCollectionvIEwinfofolderlayout之前将其设置为集合视图布局.

overrIDe func vIEwDIDLoad() {    super.vIEwDIDLoad()    musiclib.loadlibrary()    PlayListCollectionVIEw.indicatorStyle = UIScrollVIEwIndicatorStyle.White    AlbumCollectionVIEw.indicatorStyle = UIScrollVIEwIndicatorStyle.White    ArtistCollectionVIEw.indicatorStyle = UIScrollVIEwIndicatorStyle.White    layout = CustomCollectionVIEwFlow()    cvIEw = ArtistCollectionVIEw    let lay: RBCollectionVIEwInfoFolderLayout = ArtistCollectionVIEw.collectionVIEwLayout as! RBCollectionVIEwInfoFolderLayout    lay.cellSize = CGSizeMake(80,80)    lay.interItemSpacingY = 10    lay.interItemSpacingX = 0    let nib = UINib(nibname: "CollectionVIEwCell",bundle: nil)    cvIEw.registerClass(UICollectionReusableVIEw.self,forSupplementaryVIEwOfKind: RBCollectionVIEwInfoFolderheaderKind,withReuseIDentifIEr: "header")    cvIEw.registerClass(UICollectionReusableVIEw.self,forSupplementaryVIEwOfKind: RBCollectionVIEwInfoFolderFooterKind,withReuseIDentifIEr: "footer")    cvIEw.registerClass(collectionVIEwFolder.self,forSupplementaryVIEwOfKind: RBCollectionVIEwInfoFolderFolderKind,withReuseIDentifIEr: "folder")    cvIEw.registerClass(RBCollectionVIEwInfoFolderDimple.self,forSupplementaryVIEwOfKind: RBCollectionVIEwInfoFolderDimpleKind,withReuseIDentifIEr: "dimple")    ArtistCollectionVIEw.collectionVIEwLayout = lay    ArtistCollectionVIEw.registerNib(nib,forCellWithReuseIDentifIEr: "item")    ArtistCollectionVIEw.dataSource = self    ArtistCollectionVIEw.delegate = self    PlayListCollectionVIEw.collectionVIEwLayout = layout    PlayListCollectionVIEw.registerNib(nib,forCellWithReuseIDentifIEr: "item")    PlayListCollectionVIEw.dataSource = self    AlbumCollectionVIEw.collectionVIEwLayout = layout    AlbumCollectionVIEw.registerNib(nib,forCellWithReuseIDentifIEr: "item")    AlbumCollectionVIEw.dataSource = self}

我的CustomCollectionVIEwFlow看起来像这样

class CustomCollectionVIEwFlow: UICollectionVIEwFlowLayout{overrIDe init(){    super.init()    setupLayout()}required init?(coder aDecoder: NSCoder){    super.init(coder: aDecoder)    setupLayout()}overrIDe var itemSize: CGSize {    set {    }    get {        let numberOfColumns: CGfloat = 3        let itemWIDth = (CGRectGetWIDth(self.collectionVIEw!.frame) - (numberOfColumns - 1)) / numberOfColumns        return CGSizeMake(itemWIDth,itemWIDth)    }}func setupLayout() {    minimumInteritemSpacing = 0    minimumlinespacing = 0    scrollDirection = .Vertical}}

我将把所有编码放在这里,因为它将成为一个大的帖子,其他方法在这一点上是无关紧要的.然而,我所做的是将我为此制作的示例应用程序放在git here上,以供任何想要查看它的人使用.

在我实现rbcollectionvIEw之前,此图显示了我的collectionvIEw的状态.第二张图显示了我想要实现的目标

这是查看项目时视图的外观

编辑

我已经能够让它工作了.我能够像我想要的那样展示布局.就像我在实现rbcollectionvIEwinfofolderlayout之前一样.然而,似乎当文件夹较大时,屏幕尺寸实际上不会折叠.它将折叠一秒钟然后再次崩溃.它可能是由我实施的布局引起的.以下是负责此 *** 作的代码.

负责我的布局的类

class RBCollectionLayout: RBCollectionVIEwInfoFolderLayout{    var vIEw: UIVIEw!    init(vIEw: UIVIEw){        super.init()        self.vIEw = vIEw        setupLayout()    }overrIDe init(){    super.init()    setupLayout()}required init?(coder aDecoder: NSCoder) {    super.init(coder: aDecoder)    setupLayout()}func setupLayout(){    let numberofItems: CGfloat = 3    let itemWIDth = (CGRectGetWIDth(vIEw.frame)) / numberofItems    cellSize = CGSizeMake(itemWIDth,itemWIDth)    interItemSpacingX = 0    interItemSpacingY = 0}}

当屏幕从纵向更改为横向时,将计算所需的方法

overrIDe func vIEwWillLayoutSubvIEws() {    super.vIEwWillLayoutSubvIEws()    if(vIEw_artist.hIDden == false){        guard let ArtistFlowLayout = ArtistCollectionVIEw.collectionVIEwLayout as? RBCollectionVIEwInfoFolderLayout else {            return        }        lay = RBCollectionLayout(vIEw: self.vIEw)        ArtistCollectionVIEw.collectionVIEwLayout = lay        ArtistFlowLayout.invalIDateLayout()    }}

这是我在vIEwdIDload中设置布局的方式

lay = RBCollectionLayout(vIEw: self.vIEw)ArtistCollectionVIEw.collectionVIEwLayout = lay

我的git here再次提供了所有代码

解决方法 好吧,我可能是唯一可以回答你问题的人,因为我写了这个控件,我怀疑其他人是否真的在使用它.

您似乎缺少一个关键组件,它是委托方法collectionVIEw:vIEwForSupplementaryElementOfKind:atIndexPath:您告诉CollectionVIEw哪些视图用于各种元素.如果您转到GitHub Repo并查看示例,您将看到在该方法中,我将返回4个不同的视图,具体取决于所要求的vIEwKind.在您的代码中,我相信您要做的是返回RBCollectionVIEwInfoFolderFolderKind的基于自定义流布局的集合视图.这会将您的3单元格流布局视图放入所选单元格的展开文件夹中.

我克隆了您的回购,但它似乎与您在此处显示的代码保持同步.

总结

以上是内存溢出为你收集整理的ios – 如何在自定义UICollectionViewCell和CollectionViewLayout中使用rbcollectionviewinfofolderlayout全部内容,希望文章能够帮你解决ios – 如何在自定义UICollectionViewCell和CollectionViewLayout中使用rbcollectionviewinfofolderlayout所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1003718.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存