两个自定义tableviewcell高度的内容基础

时间:2016-04-21 06:56:14

标签: ios objective-c uitableview

我已经看到很多关于这个问题的问题和答案,但没有任何效果。我在tablview中有两个自定义Cell。我想根据内容更改单元格的高度。我现在尝试使用此代码,但它永远不会工作。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CustomTableViewCell *cell;
    NSLog(@"%ld",(long)indexPath.row);
    NSLog(@"%ld",(long)hospital.hospComment.count);
    if (hospital.hospComment.count > (indexPath.row+1)) {
        cell.personComment.text = [hospital.hospComment objectAtIndex:(indexPath.row +1)];

    }

    [cell setNeedsLayout];
    [cell layoutIfNeeded];

    CGFloat height = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;

    height += 1;

    return height;
}

我如何实现这一目标?

4 个答案:

答案 0 :(得分:1)

你的细胞有正确的约束吗?如果没有,这段代码永远不会起作用。因为苹果无法计算你的细胞高度

答案 1 :(得分:0)

如果您正在使用支持iOS 8及更高版本,则无需计算每行的高度,如果您已正确设置了单元格中的约束。

您需要在viewDidLoad中包含以下行:

[self.tableView setRowHeight:UITableViewAutomaticDimension];
[self.tableView setEstimatedRowHeight:45.0];

如果您支持的版本少于iOS 8,则需要手动计算每行的高度。你有很多关于计算细胞高度的教程。

答案 2 :(得分:0)

您应该声明像<,p>这样的单元格

CustomTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"tableViewCellMain"];

if (cell == nil) {

cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"tableViewCellMain"];

}

您的申报单元的Accordint将为零。第二件事是确保你给出适当的约束

另一个建议是:您可以使用Apple的新功能UITableViewAutomaticDimensionestimatedRowHeight。要了解更多信息,请参阅Appcoda中的这个重要教程和小教程。

希望这会有所帮助:)

答案 3 :(得分:0)

我刚创建了一个简单的项目并面临同样的问题,所以我保留了一个计算customTavleViewCell中单元格高度的方法,这是我做的让我们保持tableview为 tableview.h和tableview.m文件以及CustomTableViewCell.h和CustomTableViewCell.m 在tableview.h中

@property (nonatomic,strong) UIViewController *tempViewController;

在tableview.h(heightforrowatindex路径)

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
CustomTableViewCell *cell = [[CustomTableViewCell alloc]init];
_tempViewController = [[UIViewController alloc]init];
[_tempViewController.view addSubview:cell];
if(hospital.hospComment.count > (indexPath.row+1)) {
{
    cell.personComment.text = [hospital.hospComment objectAtIndex:(indexPath.row +1)];
}return [cell calcheight];}

在CustomTableViewCell.h中

-(CGFloat)calcheight;

在CustomTableViewCell.m

-(CGFloat)calcheight{
CGFloat height;
// do calculations using the text in personComment
return height;}

如果您有任何问题或有任何疑问,请在下面发表评论

亲切的问候

Koushik S