如何设置集合视图的动态高度,’视图’而不是’单元格’?
我在另一个视图中嵌入了一个集合视图并禁用了集合视图的滚动function,我想要实现的类似于Instagram的配置文件选项卡。 但是,由于单元格的数量是动态的,因此我无法弄清楚在这种情况下如何设置集合视图的高度。
我尝试搜索不同的解决方案,但大多数结果是动态更改单元格而不是集合视图高度本身。 是否有任何默认/标准解决方案?
设置集合视图所需的宽度(希望是静态的),并请求布局:
collectionView.frame = CGRectMake(0., 0., width, 0.); [collectionView layoutIfNeeded];
然后,可以在以下位置获得collectView的计算高度:
collectionView.contentSize.height
对于Swift,请按照以下步骤操作:
在声明部分声明一个CGFloat
变量:
var height : CGFloat!
在viewDidAppear
您可以通过以下方式获取:
height = self.myCollectionView.collectionViewLayout.collectionViewContentSize().height
也许当您reload
数据然后需要使用新数据计算新高度时,您可以通过以下方式获取它: addObserver
在您的CollectionView
完成重新加载数据时监听viewWillAppear
:
override func viewWillAppear(animated: Bool) { super.viewWillAppear(true) .... .... self.shapeCollectionView.addObserver(self, forKeyPath: "contentSize", options: NSKeyValueObservingOptions.Old, context: nil) }
然后添加波纹管function以获得新高度或在collectionview
完成重新加载后执行任何操作:
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer) { let newHeight : CGFloat = self.myCollectionView.collectionViewLayout.collectionViewContentSize().height var frame : CGRect! = self.myCollectionView.frame frame.size.height = newHeight self.myCollectionView.frame = frame }
并且不要忘记删除观察者:
self.myCollectionView.removeObserver(self, forKeyPath: "contentSize")
我希望这能帮助您快速解决您的问题。
在ViewController中,设置collectionView的框架。 例如:
self.collectionView.frame = CGRectMake(0, 0, 100, 200);
根据您知道单元格高度的事实,您知道屏幕上的单元格数量。 我会…
self.collectionView.frame = CGRectMake(0, 0, DEFINED_WIDTH, DEFINED_CELL_HEIGHT*Number of Cells);
还是我想念这个问题?