具有基于内容的自动行大小的tableview

时间:2013-10-29 15:32:17

标签: ios iphone ipad uitableview tableview

我想要一个iOS表格视图。每个细胞将具有1至10(最大)的不同细胞含量。我希望单元格根据内容的大小自动调整大小。

我尝试了一些没有帮助的现有解决方案。

Anyhelp在这?或任何开源

4 个答案:

答案 0 :(得分:2)

通常,这是通过在您的单元类上使用类方法来完成的,该方法将确定给定内容的必要高度。然后,在heightForRowAtIndexPath tableview委托方法中调用此类方法,将内容传递给将用于该索引路径的类方法。像这样:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

Event* event = self.events[indexPath.row];

return [EventCell cellHeightForEvent:event];
}

在单元格高度类方法中,您可以使用希望显示的NSString上的sizeWithFont等方法来计算内容的大小。

+ (CGFloat)cellHeightForEvent:(Event *)event {

    CGSize textSize = [event.title sizeWithFont:[UIFont fontWithNameB:@"Helvetica" size:12] constrainedToSize:CGSizeMake(67, MAXFLOAT)];

    CGFloat paddedHeight = textSize.height + 22;

    CGFloat min = 46;

    return MAX(min, paddedHeight);
}

这会使您的行高根据内容动态变化。请注意,您必须在layoutSubviews中相应地调整单元格视图的大小,以确定每个新行的内容大小。

注意:上面的答案建议将特定大小硬编码到特定索引路径是一个非常糟糕的解决方案。您可能不知道数据元素的数量或排序,这使得此解决方案无法实现。此外,如果数据集发生变化(数量或排序),则必须返回并重新编码索引路径以使其再次正确。我给出的解决方案不需要针对不同的或动态的数据集进行重构。

答案 1 :(得分:1)

这是你要找的那个:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 10.0f;
}

基于indexPath,您可以返回不同的高度。

答案 2 :(得分:0)

实施以下委托方法:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

indexPath.row将表示单元格内容的索引并返回其高度。

答案 3 :(得分:0)

创建自定义UITableViewCell子类,layOut你的单元格并使用相同的逻辑来计算委托方法中的rowHeight,如上所述

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
//calculate the height of your custom cell based on indexPath
return customCellHeightForRowAtIndexPath;
}