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