【发布时间】:2014-08-02 16:25:03
【问题描述】:
我知道有一个类似的question,但我想提供更多关于我如何尝试实现这一目标的提示,因为原始问题没有提供任何建议。
我有一个 UITableViewCell 作为 contentView 的子视图,还有一个 UICollectionView,我想在 collectionview 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: 这可能是因为单元格仍未显示。
有解决办法吗?
【问题讨论】:
-
所有集合视图单元格的高度是否相同?
-
我会为你的 UICollectionView 添加一个高度约束。将高度设置为单元格大小 + 您想要的任何间距。
-
点高应该是单元格数的函数
标签: ios uitableview autolayout uicollectionviewcell