tableview 中的 Collectionview 导致 2 列出现问题
Collectionview inside tableview causing issue with 2 columns
我在表格视图单元格中有垂直集合视图。集合视图也包含加载更多的功能。为了自动调整集合视图的大小,我将 tableview 单元格设置为 automaticDimension。
我还为集合视图提供了高度常数。第一次正确加载但一旦我转到最后一个单元格并在重新加载后加载更多,它会在集合视图后创建很多 space。任何人都可以让我知道我在这里做错了什么。或者有没有其他方法可以让 collection-view inside tableview 自动调整大小,这样它也可以增加 tableview 单元格的高度
**
- TableviewCell Class
**
justForYouCollectionView.dataSource = self
justForYouCollectionView.delegate = self
justForYouCollectionView.isScrollEnabled = false
self.collectionHeight.constant = self.justForYouCollectionView.collectionViewLayout.collectionViewContentSize.height
justForYouCollectionView.reloadData()
override func systemLayoutSizeFitting(_ targetSize: CGSize, withHorizontalFittingPriority horizontalFittingPriority: UILayoutPriority, verticalFittingPriority: UILayoutPriority) -> CGSize {
self.layoutIfNeeded()
let contentSize = self.justForYouCollectionView.collectionViewLayout.collectionViewContentSize
return CGSize(width: contentSize.width, height: contentSize.height + 20)
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
if indexPath.row == self.justForYouArray.count - 1 && self.isLoadMore {
updateNextSet()
}
}
**
- CollectionViewCell Class
**
override func preferredLayoutAttributesFitting(_ layoutAttributes: UICollectionViewLayoutAttributes) -> UICollectionViewLayoutAttributes {
let autoLayoutAttributes = super.preferredLayoutAttributesFitting(layoutAttributes)
// Specify you want _full width_
let targetSize = CGSize(width: layoutAttributes.frame.width, height: 0)
// Calculate the size (height) using Auto Layout
let autoLayoutSize = contentView.systemLayoutSizeFitting(targetSize, withHorizontalFittingPriority: UILayoutPriority.required, verticalFittingPriority: UILayoutPriority.defaultLow)
let autoLayoutFrame = CGRect(origin: autoLayoutAttributes.frame.origin, size: autoLayoutSize)
// Assign the new size to the layout attributes
autoLayoutAttributes.frame = autoLayoutFrame
return autoLayoutAttributes
}
额外的 space 可以在图像中看到
我之前所做的就是,在情节提要中设置 tableview 高度约束集,并将其出口放入 viewController,然后在填充数据后获取数组计数并除以 2,除以后我将它相乘通过 CollectionViewCell 高度并将该高度设置为 UITableView 高度约束,如下所示。
let count = (array.count / 2) * cellHeight
tableviewHeightConstraint.constant = CGFloat(count)
这将解决您的问题。
尝试
let a = (yourArray.count /2 ) * heightCell
tblViewHeightConstraint.constant = CGFloat(a)
我在表格视图单元格中有垂直集合视图。集合视图也包含加载更多的功能。为了自动调整集合视图的大小,我将 tableview 单元格设置为 automaticDimension。 我还为集合视图提供了高度常数。第一次正确加载但一旦我转到最后一个单元格并在重新加载后加载更多,它会在集合视图后创建很多 space。任何人都可以让我知道我在这里做错了什么。或者有没有其他方法可以让 collection-view inside tableview 自动调整大小,这样它也可以增加 tableview 单元格的高度
**
- TableviewCell Class
**
justForYouCollectionView.dataSource = self
justForYouCollectionView.delegate = self
justForYouCollectionView.isScrollEnabled = false
self.collectionHeight.constant = self.justForYouCollectionView.collectionViewLayout.collectionViewContentSize.height
justForYouCollectionView.reloadData()
override func systemLayoutSizeFitting(_ targetSize: CGSize, withHorizontalFittingPriority horizontalFittingPriority: UILayoutPriority, verticalFittingPriority: UILayoutPriority) -> CGSize {
self.layoutIfNeeded()
let contentSize = self.justForYouCollectionView.collectionViewLayout.collectionViewContentSize
return CGSize(width: contentSize.width, height: contentSize.height + 20)
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
if indexPath.row == self.justForYouArray.count - 1 && self.isLoadMore {
updateNextSet()
}
}
**
- CollectionViewCell Class
**
override func preferredLayoutAttributesFitting(_ layoutAttributes: UICollectionViewLayoutAttributes) -> UICollectionViewLayoutAttributes {
let autoLayoutAttributes = super.preferredLayoutAttributesFitting(layoutAttributes)
// Specify you want _full width_
let targetSize = CGSize(width: layoutAttributes.frame.width, height: 0)
// Calculate the size (height) using Auto Layout
let autoLayoutSize = contentView.systemLayoutSizeFitting(targetSize, withHorizontalFittingPriority: UILayoutPriority.required, verticalFittingPriority: UILayoutPriority.defaultLow)
let autoLayoutFrame = CGRect(origin: autoLayoutAttributes.frame.origin, size: autoLayoutSize)
// Assign the new size to the layout attributes
autoLayoutAttributes.frame = autoLayoutFrame
return autoLayoutAttributes
}
额外的 space 可以在图像中看到
我之前所做的就是,在情节提要中设置 tableview 高度约束集,并将其出口放入 viewController,然后在填充数据后获取数组计数并除以 2,除以后我将它相乘通过 CollectionViewCell 高度并将该高度设置为 UITableView 高度约束,如下所示。
let count = (array.count / 2) * cellHeight
tableviewHeightConstraint.constant = CGFloat(count)
这将解决您的问题。
尝试
let a = (yourArray.count /2 ) * heightCell
tblViewHeightConstraint.constant = CGFloat(a)