1

好的,这是几乎每个 iOS 开发人员都在努力解决的老问题。关于这个主题的许多答案都是可用的。

但是,我仍然没有找到一个真正实用的通用解决方案UITableViewCell来计算tableView:heightForRowAtIndexPath:.

我了解布局机制的UITableView工作原理(它在实际布置任何单元格之前计算整个表格的高度)。
我也明白,一个人基本上必须预测在UITableViewCells 布局方法中会发生的所有事情,例如sizeWithFont:...使用NSString.

我假设单元格的样式是UITableViewCellStyleSubtitle从开始的(我们以后可以变得更通用!)。

这些将是我的要求:

  • 单元格可能位于分组或普通的 tableView 中
  • 系统版本可能是 iOS 6 或 iOS 7+
  • 可能会或可能不会设置图像cell.imageView
  • 可能会或可能不会设置附件视图
  • cell.textLabel可能包含也可能不包含文本。
  • cell.detailTextLabel可能包含也可能不包含文本。
  • 字体可能是定制的
  • 标签可能是多行的
  • 表格宽度是任意的(纵向、横向、iPad...)
  • 细胞数量有限(可能有几十个)

在大多数情况下,这种动态单元格将用于短列表(可能是某种详细视图),所以我认为像这里描述的那样预先计算单元格是可行的:https ://stackoverflow.com/a/8832778 /921573

我正在寻找一种计算满足给定要求的单元高度的实现。
如果有人能分享一些见解和经验,我会非常高兴 - 在此先感谢!

4

2 回答 2

0

您可以在表格视图的委托中保留一个虚拟单元格,并让它计算自己所需的大小。

于 2013-09-15T10:35:27.977 回答
-1

制作具有不同高度的自定义单元格的最佳方法是:

为单元格制作一个NSMutableArray

@property (nonatomic,retain)NSMutableArray* cellsArray;

然后在米:

调用的第一个方法是

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

在这里制作你的手机:

    -(float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
        if (!self.cellsArray) {

            self.cellsArray = [[NSMutableArray alloc]init];

        }

        ListCell* cell = [[ListCell alloc] initWithFrame:CGRectMake(x, y, width, height)];


       // IMPLEMENT your custom cell here, with custom data, with custom,different height:

       // after add this cell to your array:
        [self.cellsArray addObject:cell];

       // IMPORTANT STEP:  set your cell height for the new height:

        cell.frame = CGRectMake(cell.frame.origin.x, cell.frame.origin.y, 303, yourLastItemInCell.frame.origin.y + yourLastItemInCell.frame.size.height);


        return cell.frame.size.height;
    }

在您获得具有不同高度的自定义单元格后:

#pragma mark - conform to delegates

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return 10;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {


    return self.cellsArray[indexPath.row];

}

我希望它有帮助!

编辑:

tableView = [[UITableView alloc] initWithFrame:frame style: UITableViewStylePlain];
tableView.delegate = self;
tableView.dataSource = self;
tableView.backgroundColor = [UIColor clearColor];
tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
于 2013-09-15T10:32:47.310 回答