确定的tableView:heightForRowAtIndexPath:解决方案

时间:2013-09-15 10:16:58

标签: iphone ios objective-c uitableview

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

但是我仍然没有找到一个非常实用,通用的解决方案来计算UITableViewCelltableView:heightForRowAtIndexPath:的高度。

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

我假设单元格的样式首先是UITableViewCellStyleSubtitle(稍后我们会更加通用!)。

这些是我的要求:

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

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

我正在寻找一种计算满足给定要求的细胞高度的实施方案 如果有人能分享一些见解,我会感到非常高兴。经验 - 提前感谢!

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:-1)

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

为单元格制作NSMutableArray

@property (nonatomic,retain)NSMutableArray* cellsArray;

然后在m。:

调用的第一个方法是

-(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;