ios - UITableViewCell 如何在 AutoLayout 下根据是否有 ImageView 自适应高度
迷茫
迷茫 2017-04-17 13:24:48
[iOS讨论组]

有两种 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)
阿神

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号