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

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 这个高度的。

- (CGFloat)tableView:(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,代码会变成这样:

- (BOOL)hasImageAtIndexPath:(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的影子。

【热门文章】
【热门文章】