ios tableViewCell 高度自适应

2023-05-16

开发过程中,会很少使用系统自带的cell,一般都会自定义cell,用来展示各式各样的界面布局,所以我们要自定义cell---------项目中用过很多种cell高度自适应的算法,都感觉挺麻烦的,这个方法相对来说简单易懂,希望对大家有帮助

1、创建存储数据类:              Model层

iOS 开发--相对来说比较简单的cell高度自适应

2、创建自定义cell类:.h文件         View层

#import @class HHPollingItemsModel;
@interface HHPollingDetailCell : UITableViewCell
@property (nonatomic, strong) UILabel *titleLabel;
@property (nonatomic, strong) UILabel *lineLabel;
@property (nonatomic, strong) UILabel *valueLabel;
@property (nonatomic, strong) HHPollingItemsModel *model;
//类方法,返回的值用来计算cell的高度
+ (CGFloat)heightWithModel:(HHPollingItemsModel *)model;
@end

3、创建自定义cell类:.m文件

#import "HHPollingDetailCell.h"
#import "HHPollingItemsModel.h"
@implementation HHPollingDetailCell
//初始化自定义控件
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
        self.titleLabel = [[UILabel alloc] init];
        self.titleLabel.font = [UIFont systemFontOfSize:14.0];
        self.titleLabel.numberOfLines = 0;
        self.titleLabel.textColor = kColor(164, 164, 164);
        [self addSubview:self.titleLabel];
         
        self.valueLabel = [[UILabel alloc] init];
        self.valueLabel.font = [UIFont systemFontOfSize:14.0];
        self.valueLabel.textColor = kColor(164, 164, 164);
        [self addSubview:self.valueLabel];
        _lineLabel = [[UILabel alloc] init];
        _lineLabel.backgroundColor = [UIColor colorWithHexString:@"#E4EEF0"];
        [self addSubview:_lineLabel];
    }
    return self;
}
//由于cell的布局特殊化,所有约束条件都在layoutSubviews方法中写
- (void)layoutSubviews
{
    [super layoutSubviews];
     
    [self.valueLabel mas_makeConstraints:^(MASConstraintMaker *make) {
        make.centerY.equalTo(self);
        make.right.equalTo(self).with.offset(-15);
        make.height.equalTo(@(14));
    }];
     
    //由于cell的高度是用该控件来撑开,所以不用给它高度约束
    [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.equalTo(self).with.offset(10);
        make.left.equalTo(self).with.offset(15);
        make.right.equalTo(self).with.offset(-70);
    }];
    [_lineLabel mas_makeConstraints:^(MASConstraintMaker *make) {
        make.bottom.equalTo(self);
        make.left.equalTo(self);
        make.right.equalTo(self);
        make.height.equalTo(@(1));
    }];
}
//model的set方法,用来给自定义控件赋值
- (void)setModel:(HHPollingItemsModel *)model
{
    if ([model.itemType isEqualToString:@"0"]) {
        self.titleLabel.text = [NSString stringWithFormat:@"%@", model.itemName];
        self.valueLabel.text = model.itemValue;
    } else if ([model.itemType isEqualToString:@"1"]) {
        self.titleLabel.text = [NSString stringWithFormat:@"%@/%@", model.itemName, model.itemContent];
        self.valueLabel.text = model.itemValue;
    } else {
        self.titleLabel.text = [NSString stringWithFormat:@"%@", model.itemName];
        self.valueLabel.text = model.itemValue;
    }
}
//注意:这是写这篇文章的重中之重,核心代码
+ (CGFloat)heightWithModel:(HHPollingItemsModel *)model
{
    HHPollingDetailCell *cell = [[HHPollingDetailCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@""];
    [cell setModel:model];
    [cell layoutIfNeeded];
    CGRect frame = cell.titleLabel.frame;
    return frame.origin.y + frame.size.height + 10;
}
@end

4、最后一步:在含有tableView的控制器中调用cell中的类方法,用来计算动态的cell高度    Controller层

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //取出model
    HHPollingItemsModel *model = self.items[indexPath.row];
    return [HHPollingDetailCell heightWithModel:model];
}

好了,这就是cell高度自适应的全过程,亲测使用带有图片、文字或者图片加文字的cell高度自适应

下面就是自适应后的布局:

iOS 开发--相对来说比较简单的cell高度自适应

iOS 开发--相对来说比较简单的cell高度自适应

还有更简单更实用的,望多指教,谢谢!



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ios tableViewCell 高度自适应 的相关文章

随机推荐

  • mysql单表调整大小_MySQL单表大小问题

    在老版本的MySQL 3 22中 xff0c MySQL的单表限大小为4GB xff0c 当时的MySQL的存储引擎还是ISAM存储引擎 但是 xff0c 当出现MyISAM存储引擎之后 xff0c 也就是从MySQL 3 23开始 xff
  • AC日记——简单密码 openjudge 1.7 10

    10 简单密码 总时间限制 1000ms 内存限制 65536kB 描述 Julius Caesar曾经使用过一种很简单的密码 对于明文中的每个字符 xff0c 将它用它字母表中后5位对应的字符来代替 xff0c 这样就得到了密文 比如字符
  • 触摸事件 - UIControlEvents

    首先 xff0c UIControlEvents有这个几种 xff1a UIControlEventTouchDown 61 1 lt lt 0 on all touch downs UIControlEventTouchDownRepea
  • PyCharm+cmd中使用Anaconda 与 新建Python环境(Windows)

    PyCharm配置Anaconda Anaconda的安装在网上已经有了 xff0c 这里主要讲之前已经安装了已经配置好Python环境变量以及PyCharm的情况下 使用Anaconda 即在PyCharm中出现了 ModuleNotFo
  • 00018计算机应用基础知识点归纳,自考00018计算机应用基础汇总资料

    A 这些文件目前均处于打开状态 B 这些文件正在排队等待打印 C 这些文件最近用Word处理过 D 这些文件是当前目录中扩展名为DOT和文件 62 在Word中 xff0c 移动光标到文件尾的快捷键组合是 A Ctrl 43 PgDn B
  • 给Debian安装Xfce桌面

    1 sudo apt get install xorg xdm xfce4 2 vi xinitrc xff0c 然后输入 xff1a exec xfce4 xff0c 在终端输入startx命令后就能进入xfce4 xff0c 或直接在终
  • python七段数码管的详解,Python入门基础:七段数码管绘制

    1 在学习Python的过程中 xff0c 运用所学的一些基础知识 xff0c 进行一些简单的编程 xff0c 可以收获很多乐趣 在生活中 xff0c LED灯无处不在 xff0c 荧幕显示的广告词 xff0c 给我们呈现出动态的视觉效果
  • 锐捷和华为重分布实验

    锐捷 华为路由重分布实验 实训目的 xff08 1 xff09 熟悉路由器的基本配置 xff1b xff08 2 xff09 掌握路由重分布配置 实训技术原理 为了实现全网互通 xff0c 我们需要路由器能在不同协议之间交换路由信息或者全网
  • md编辑器活动

    312313 4142131323131313 545465645
  • app.jsNodejs启动测试服务

    39 use strict 39 var express 61 require 39 express 39 var app 61 express 39 39 var fs 61 require 39 fs 39 app get 39 dat
  • python之zip打包

    import zipfile 压缩 z 61 zipfile ZipFile 39 z zip 39 39 w 39 z write 39 xo xml 39 z write 39 xxxoo xml 39 z close 解压 z 61
  • CentOS 7之btrfs文件系统

    核心特性 xff1a 支持多物理卷 xff1a btrfs 可由多个底层物理卷组成 xff0c 支持 RAID xff0c 以联机 添加 移除 xff0c 修改 物理卷 写时复制更新机制 xff08 CoW xff09 xff1a 复制 更
  • 用symbol来获得ShadowSSDT的原始地址和函数名

    在网上看了下 xff0c 获得ShadowSSDT的函数名和原始地址的方法和文章不是很多 比较简单的应该算是设计张函数名表和用symbol的方法 个人觉得用symbol来获得ShadowSSDT还是比较方便的 xff0c 而且自己也不用去创
  • GitLab-ce的汉化

    一 汉化指南 xff0c 基于 Larry Li 版汉化指南 修改 以9 0 stable zh分支为例 源码安装汉化 推荐按照 gitlab ce 源代码中 doc install installation md 的内容手工安装 GitL
  • 打印杨辉三角形

    题目 xff1a 打印出杨辉三角形 程序分析 xff1a 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 定义的是二维数组 xff0c 为了使输出的结果看起来漂亮一点 xff0c 可以用 for xf
  • VMware虚拟机文件损坏修复方法

    一 说明一下起因 xff1a 今天在XP虚拟机中一冲动下载一个5点多GB的PT文件 xff0c 忘记此虚拟文件 xff08 vmdk文件 xff09 仅有2G空间 xff0c 结果超成了空间不足 xff0c VMware7 1提示出错 xf
  • debian下增强bash的自动补全功能

    在我们新安装的Debian系统时 xff0c 发现很多命令都不能自动补全 xff0c 这是很不方便的 xff0c 因为每个人的精力都是有限的 xff0c 不是对每个命令的每一个细节都能完全记住 xff0c 因此自动补全是一个很实用的功能 x
  • 华为RH5885H v3服务器RAID设置及问题解析

    今年春 xff0c 华为全球首发基于英特尔至强E7 v2处理器的系列服务器新品 xff0c 其中包括RH8100 V3八路服务器 RH5885H V3四路服务器和E9000刀片服务器的四路计算节点CH242 V3服务器 最近单位新购了几台华
  • Invalid or corrupt jarfile坑爹问题解决

    打包一个可以直接利用java jar jar cvfm lottery jar MANIFEST MF jdbc properties com 如果出现 xff1a java io IOException invalid header fi
  • ios tableViewCell 高度自适应

    开发过程中 xff0c 会很少使用系统自带的cell xff0c 一般都会自定义cell xff0c 用来展示各式各样的界面布局 xff0c 所以我们要自定义cell 项目中用过很多种cell高度自适应的算法 xff0c 都感觉挺麻烦的 x