【发布时间】:2016-02-12 13:24:35
【问题描述】:
在选择该单元格时,我要做的是在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
上可用【问题讨论】:
标签: ios swift uicollectionview uicollectionviewcell