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

发布于 2022-08-30 16:36:15 字数 918 浏览 20 评论 0

有两种 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>";

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

饮惑 2022-09-06 16:36:15

说说我看到的几个问题:
(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的影子。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文