我有一个UICollectionView
网格系统indexPath.item % 3 == 0 ? largeCellSize : smallCellSize
并且它可以工作。 This是它的外观截图。 UICollectionView
位于UITableViewCell
的单元格内,UITableView
位于ViewController
内。
UITableViewCell
高度取决于UICollectionView
中的单元格数。因此,当largeCellSize
可用时,单元格高度应该会增加,因为smallCellSize
之后的largeCellSize
会跟随。
例如:大,小,小 - > 增加细胞高度 - >大,小,小 - > 增加细胞高度 - >等等......而且真的没有倍数,因为大细胞出现在第1,第4,第7,第10,第13,第16等等......
largeCellSize
的尺寸为400
,smallCellSize
为200
。所以基本上,当{em>第1,第4,第7,第10,第13,第16等等时,UITableViewCell
大小只会增加400
... "模式"细胞数量。
如何在适当时确保单元格高度增加400
?
CODE:
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
switch indexPath.row {
case 0: // Ignore this...
return 110
case 1: // Problem is here...
let productCellCount = self.productsArray.count
print("---------- heighForRowAt")
print(productCellCount)
// I can't seem to get the right logic to show just until the last cell.
// This shows the last cell and then a bunch of empty space.
// As for the false, it shows 6 out of the 11 cell and
// the large cell that it's supposed to show it shows only half of it
return CGFloat(productCellCount % 3 == 0 ? Double(400 * productCellCount / 2) : 200 * ceil(Double(productCellCount / 2)))
default:
return UITableViewAutomaticDimension
}
}
更新:
为了澄清一下,我在UITableView
中有两个单元格,第二个单元格正在填充来自Firebase的数据UICollectionView
。随着数据的增加/减少,细胞数量明显会发生变化。根据单元格的数量,UITableViewCell
的高度将增加/减少。
答案 0 :(得分:1)
实施collectionView(_:layout:sizeForItemAt:)
UICollectionViewDelegateFlowLayout方法。在那里放置关于indexPath
逻辑的所需条件,每次重新加载表时它应该正确呈现
答案 1 :(得分:0)
道歉,我认为以下内容应该符合您的要求:
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
switch indexPath.row {
case 0: // Ignore this...
return 110
case 1: // Problem is here...
let productCellCount : Int = self.productsArray.count
let remainder : Int = productCellCount % 3
let numberOfTriads : Int = (productCellCount - remainder) / 3
print(#function)
print("PRODUCT CELL COUNT: \(productCellCount) NUMBER OF TRIADS: \(numberOfTriads) REMAINDER: \(remainder)")
print("REQUIRED HEIGHT: \(((numberOfTriads) * 400) + (remainder > 0 ? 400 : 0))")
// New code
return CGFloat(((numberOfTriads) * 400) + (remainder > 0 ? 400 : 0))
default:
return UITableViewAutomaticDimension
}
}
显然,只有当您确定每三行都需要指定的高度时,这才有效。更强大的实现可能会查询要放置在每个单元格中的集合视图并返回它所需的高度。
希望有所帮助。
答案 2 :(得分:0)
正如你在评论中所说:“如果在uicollectionview中有1-3个单元格,那么表格视图单元格高度应为400,如果是4-6则为800,7-9然后为1200,依此类推”
所以现在你可以做的是你的tableview cellForRowAt方法,你可以检查你的UICollectionView中有多少项,然后将特定高度设置为某个变量并重新加载tableView。稍后在heightForRowAt中将变量高度设置为特定的indexPath.row单元格。