Ios 停止UICollectionView滚动并使其显示所有单元格

Ios 停止UICollectionView滚动并使其显示所有单元格,ios,swift,uicollectionview,storyboard,Ios,Swift,Uicollectionview,Storyboard,我有一个集合视图,当它有10个或更少的项目时,它可以正常工作。每行有5个项目,因此最多10个项目有两行。但是,当我有超过10个项目时,它会创建一个第三行,该行被切断,集合视图开始滚动。当我尝试禁用滚动时,集合视图会切断最后一行。理想情况下,我希望有一个集合视图,无论我有多少行,它都将保持垂直扩展。有人能告诉我实现这一目标的方向吗 谢谢大家! 1。用于动态高度更新 您可以为collectionView的contentSize添加观察者 collectionView.addObserver(s

我有一个集合视图,当它有10个或更少的项目时,它可以正常工作。每行有5个项目,因此最多10个项目有两行。但是,当我有超过10个项目时,它会创建一个第三行,该行被切断,集合视图开始滚动。当我尝试禁用滚动时,集合视图会切断最后一行。理想情况下,我希望有一个集合视图,无论我有多少行,它都将保持垂直扩展。有人能告诉我实现这一目标的方向吗


谢谢大家!

1。用于动态高度更新

您可以为collectionView的contentSize添加观察者

   collectionView.addObserver(self, forKeyPath: "contentSize", options: [.new,.old], context: nil)
然后可以重写此方法以检查collectionView中的contentSize更改

    override func observeValue(forKeyPath keyPath: String?,
                               of object: Any?,
                               change: [NSKeyValueChangeKey : Any]?,
                               context: UnsafeMutableRawPointer?) {

         if let obj = object as? UICollectionView, obj == self.collectionView && keyPath == "contentSize" {
            if let oldVal = change?[NSKeyValueChangeKey.oldKey] as? CGSize, let newValue = change?[NSKeyValueChangeKey.newKey] as? CGSize,oldVal.height == newValue.height  {
                return
            }

            let contentHeight = self.collectionView.contentSize.height
            //You can update the height constraint or you can manually update the height of collection view. 

            self.heightConstraintCV.constant = contentHeight 
        }
        UIView.animate(withDuration: 0.1) {
            self.view.setNeedsLayout()
            self.view.layoutIfNeeded()
        }
    }
2。一个简单的方法是手动计算高度。如果您确定每行有5个元素。

height = (numberOfRows * heightOfEachRow)
3。将contentSizeHeight直接设置为collectionView的高度


height=collectionView.contentSize.height

集合视图单元格在布局后将是静态的,因为在中,用户将永远看不到它的变化,因此我正在寻找一种在打开视图时布局它的方法。这样行吗?在这种情况下,您可以直接获取contensize,比如collectionView.contentSize,而不是观察它。然后将高度设置为集合视图的高度另一种方式是,如果您知道单元格的高度,您可以只计算
(单元格数量)*高度