我知道有一个类似的问题,但我想提供更多关于我如何尝试实现它的提示,因为原始问题没有提供任何建议。
我有一个UITableViewCell
作为contentView的子视图,其中有一个 UICollectionView
,我想让单元格高度与集合视图的 contentSize
相关,表格视图单元格是集合视图的代理和数据源。
集合视图应该在垂直方向上固定且不能滚动,并且应该根据单元格行数自适应其高度。
为了做到这一点,我尝试使用常规表格视图单元格的相同技术。我创建一个虚拟单元格并保留对它的引用,然后在方法- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
中将数据传递给单元格以显示它,然后询问其压缩大小的高度。
就像这样:
- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
CGSize size = CGSizeZero;
NSDictionary * data = self.data[indexPath.row];
if (data[KEY_CELL_IDENTIFIER] == CellIdentifierPost) {
NSNumber * cachedHeight = [self.heightCaches objectForKey:[(PostObject*)data[KEY_CELL_DATA] postObjectId]];
if (cachedHeight) {
return (CGFloat)[cachedHeight doubleValue];
}
[_heightCell configureCellWith:data[KEY_CELL_DATA]];
size = [_heightCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
[self.heightCaches setObject:@(size.height) forKey:[(PostObject*)data[KEY_CELL_DATA] postObjectId]];
}
else if (data[KEY_CELL_IDENTIFIER] == CellIdentifierComment){
size = (CGSize) {
.width = NSIntegerMax,
.height = 160.f
};
}
else {
size = (CGSize) {
.width = NSIntegerMax,
.height = 50.f
};
}
return size.height;
}
这个方法对于其他单元格非常有效,但对于这个单元格却不行,结果是一个几乎没有高度的完全压缩的单元格。
问题似乎是由于内部单元格的放置造成的。即使在提供数据后我强制集合视图重新加载数据,它似乎从未调用-collectionView:cellForItemAtIndexPath:
,这可能是因为单元格仍未显示。
有没有解决办法?