开发者社区> 问答> 正文

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 = "";

展开
收起
a123456678 2016-07-27 16:05:29 2271 0
1 条回答
写回答
取消 提交回答
  • 说说我看到的几个问题:
    (1)首先你用的语法太老旧了,现在用literal syntax,代码会变成这样:

    • (BOOL)hasImageAtIndexPath:(NSIndexPath *)indexPath
      {
      NSDictionary* item = dataDict@"items";
      NSString* url = item[@"url"];
      return ![url isEqual:@"NULL"];
      }

    (2)比较字符串应该用:

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

    2019-07-17 20:00:46
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载