这就是我的视图控制器的样子.
在我的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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)