【问题标题】:UICollectionVIew inside a UITableViewCell how to get dynamic height with autolayoutUITableViewCell 中的 UICollectionVIew 如何使用自动布局获取动态高度
【发布时间】: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


【解决方案1】:

我建议您为您的 collectionView 创建一个高度约束。

然后,根据单元格的数量,您可以计算它的高度,最后,您更新该约束并调用 [collectionView setNeedsUpdateConstraints]

【讨论】:

    猜你喜欢
    • 2014-01-03
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    • 2014-07-30
    • 2015-01-19
    • 2017-04-07
    相关资源
    最近更新 更多