UITableViewCell 如何在 AutoLayout 下根据是否有 ImageView 自适应高度

有两种 cell 的样式,一种是需要加载一个图片的 Cell_A,一种是没有的 Cell_B
Cell_B 的高度比 Cell_A 要小。
那么问题来了,如何让 cell 根据情况自动改变高度呢?

我有一个函数来判断每行到底需不需要图片

 - BOOL hasImageAtIndexPath:NSIndexPath *indexPath { NSDictionary* item = [[dataDict objectForKey:@"items"] objectAtIndex:indexPath.row]; NSString* url = [item objectForKey:@"url"]; return ![url isEqual: @"NULL"]; }

这样写之后,得到的全是 249 这个高度的。

- CGFloattableView:UITableView *tableView heightForRowAtIndexPath:NSIndexPath *indexPath { if [self hasImageAtIndexPath:indexPath] { return 249.0;//cell_a } else { return 150.0;//cell_b }
}

UPDATE:
原来 item 里的关键键值对长这个样子,解析出来是一个 NSNull 的对象,并不是一个 NSString

url = "<null>";

说说我看到的几个问题:
(1)首先你用的语法太老旧了,现在用literal syntax,代码会变成这样:

- BOOLhasImageAtIndexPath:NSIndexPath *indexPath
{ NSDictionary* item = dataDict[@"items"][indexPath.row]; NSString* url = item[@"url"]; return ![url isEqual:@"NULL"];
}

2比较字符串应该用:

[url isEqualToString:@"NULL"];

3如果一直是249,那显然hasImageAtIndexPath:有问题;
4是否有必要做成两个cell?从你的内容上看丝毫看不到Auto Layout的影子。

发表评论

电子邮件地址不会被公开。 必填项已用*标注