如何设置集合视图的动态高度,’视图’而不是’单元格’?

我在另一个视图中嵌入了一个集合视图并禁用了集合视图的滚动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); 

还是我想念这个问题?