- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想要做的是在选中此单元格时在 UICollectionViewCell 中显示一个 UICollectionView。我想用 rbcollectionviewinfofolderlayout展开我的收藏 View 并在其中显示一个新的收藏 View 。但是我不确定如何将它实现到我现有的代码中。我在一个 View 中有三个 Collection View 。我根据用户所做的选择隐藏和取消隐藏我的 View 。我为我的 Collection View 中的单元格使用了自定义单元格 xib,并且我有一个自定义的 collectionviewflowlayout,确保始终有 3 个单元格显示在设备的宽度上。
这就是我的 View Controller 的样子。
在我的 viewDidLoad 中,我必须将 RBCollectionViewInfoFolderLayout 设置为我的 Collection View 。如您所见,布局变量包含我的 CustomCollectionViewFlow
,我在实现 RBCollectionviewinfofolderlayout 之前将其设置为 Collection View 布局。
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 的状态。第二张图片显示了我正在努力实现的目标
这是点击项目时 View 的外观
编辑
我已经能够让它正常工作了。我能够显示我想要的布局。就像我在实现 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
最佳答案
好吧,我可能是唯一可以回答您问题的人,因为我编写了这个控件并且我怀疑其他人是否真的在使用它。
您似乎缺少一个关键组件,即委托(delegate)方法 collectionView:viewForSupplementaryElementOfKind:atIndexPath:
,您可以在其中告诉 CollectionView 对各种元素使用哪些 View 。如果你去GitHub Repo并查看示例,您将看到在该方法中我根据请求的 viewKind 返回 4 个不同的 View 。在您的代码中,我相信您想要做的是为 RBCollectionViewInfoFolderFolderKind
返回基于自定义流布局的 Collection View 。这会将您的 3 单元格流布局 View 放入所选单元格的展开文件夹中。
我克隆了您的存储库,但它似乎不是您在此处显示的代码的最新版本。
关于ios - 如何将 rbcollectionviewinfofolderlayout 与自定义 UICollectionViewCell 和 CollectionViewLayout 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35363762/
我有一个 UICollectionViewController 管理一个 Collection View ,该 Collection View 针对不同的应用程序状态使用不同的布局。我正在使用 -se
我目前正在开发一种功能,可以在 UICollectionView 的 2 个不同 CollectionViewLayouts 之间进行切换。切换工作得很好,布局使用相同的单元类别和不同的 Nib 。我
我想通过使用 UICollectionViewDelegateFlowLayout 为我的 collectionView 的每一行自定义很多布局大小,如下所示: func collectionView
我在 TableView 中有一个动态 collectionView,当我添加 invalidateLayout 时出现错误(图片如下)但是如果我删除 invalidateLayout 前四个单元格被
我在 oneView Controller 中有六个 UICollectionView,取决于用户选择的状态,我想重新加载集合数据。我的收藏 View 应该是水平滚动方向,动态大小单元格。有我的 se
根据UICollectionView和UICollectionViewLayout的类引用,UICollectionView持有对其collectionViewLayout属性的强引用,UIColle
是否可以在故事板中将 CollectionViewFlowLayout 更改为 CollectionViewLayout,因为我需要在示例中实现水流或 Pinterest 布局 RFQuiltLa
我尝试按照此解决方案 (How to determine height of UICollectionView with FlowLayout) 来确定我的 UICollectionViewLayou
所以很有趣,我正在尝试使用 collectionViewLayout sizeForItemAtIndexPath 在 collectionView 中一次只显示一个项目并水平滚动,我试过这个: -
我有一个 UICollectionViewLayout 子类,其中包含一个包含多行 UILabel 的补充 View 。问题是并非所有文本在某个点都是可见的,我怎样才能让补充 View 的高度等于它的
我已经实现了 UICollectionView 并且它可以使用下面的示例水平和垂直滚动粘性行和列: Example Github 应用程序可以在 Swift2 上找到,但升级后 Swift3 Cust
我在获取ListCollectionViewLayout(IGListKit 提供的库存布局)与Texture(以前称为AsyncDisplayKit)一起使用时遇到了麻烦。 这是我的 Collect
我在尝试将 View 更改为 Collection View 时遇到错误 error Argument Labels '(collectionviewlayout:)' do not match an
我开始尝试自定义 UICollectionView 布局。我的 UIViewController 中有一个 UICollectionView,它符合 UICollectionViewDataSourc
我有一个 UICollectionView ,我想动态应用两个不同的布局。 UICollectionViewFlowLayout:具有相同大小的单元格和圆形图像的布局。 var flowLayout:
我创建了一个自定义 collectionViewLayout,它根据设备屏幕大小按比例缩放单元格。包含在单元格中的所有图像似乎都被拉伸(stretch)了。我试过使用 aspectFit 和 aspe
在 collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayo
我想要做的是在选中此单元格时在 UICollectionViewCell 中显示一个 UICollectionView。我想用 rbcollectionviewinfofolderlayout展开我的
在 Swift 1.1 及之前的版本中,这是合法的: let layout = UICollectionViewLayout() class MyDynamicAnimator : UIDynamic
我是一名优秀的程序员,十分优秀!