iOS 自定义不等高的cell

自定义cell(IOS的三种方法) 自定义的三中创建cell的方式,文本加代码,瞬间掌握创建cell的方法。 立即下载

自定义不等高的cell


1.给模型增加frame数据(纯代码)

  • 让ViewController继承UITableViewController,移除storyboard中的ViewController,新建一个UITableViewController让其与ViewController建立关联。
    @interface ViewController:UITableViewController

  • 在ViewController.m文件中实现UITableView代理的这个方法,这个方法会返回cell的高度,所以需要在返回高度前计算出cell的高度。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    AZStatus *status=self.statuses[indexPath.row];

    return status.cellHeight;
}
  • 在status数据模型中计算出所有控件frame,只有模型数据知道哪些控件需要显示,这个方法会经常调用,考虑到性能对其进行判断,只有当第一次调用时才会计算。
- (CGFloat)cellHeight
{

    if (_cellHeight==0) {
        CGFloat margin=10;
        ...
        // 图片frame
        if (self.picture) {//有配图
            CGFloat picX=margin*3;
            CGFloat picY=CGRectGetMaxY(self.textFrame)+margin;
            CGFloat picWH=200;
            self.pictureFrame=CGRectMake(picX, picY, picWH, picWH);
            _cellHeight=CGRectGetMaxY(self.pictureFrame)+margin;
        }else{//无配图

            _cellHeight=CGRectGetMaxY(self.textFrame)+margin;
        }

    }

    return _cellHeight;
}
  • 添加控件
-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    if (self=[super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
        ...

        //配图
        UIImageView *pictureView=[[UIImageView alloc]init];
        [self.contentView addSubview:pictureView];
        self.picture1View=pictureView;  

    }
  • 在AZStatusCell.h文件中引用模型
#import <UIKit/UIKit.h>
@class AZStatus;
@interface AZStatusCell : UITableViewCell

/*模型数据*/
@property(nonatomic,strong)AZStatus *status;

@end
  • 在模型的set方法中给控件注入数据,同时也可以确定frame,和在layoutSubViews中确定frame效果一致

-(void)setStatus:(AZStatus *)status
{
    _status=status;
    // 设置数据
    ...
    // 配图
    if (status.picture) {
        self.picture1View.hidden=NO;
        self.picture1View.image=[UIImage imageNamed:status.picture];
    }else{
        self.picture1View.hidden=YES;
    }

    //设置frame
    self.iconView.frame=status.iconFrame;
    self.nameLabel.frame=status.nameFrame;
    self.text_Label.frame=status.textFrame;
    self.vipView.frame=status.vipFrame;
    self.picture1View.frame=status.pictureFrame;

}

2.storyboard动态cell实现(iOS8以后)

  • 在stroyboard的动态cell中添加所有的子控件
    这里写图片描述

  • 将cell中所有的子控件和AZStatusCell.m文件中的属性建立好连线,并将图片的约束也建立好连线
    这里写图片描述

  • 在status模型的set方法中,通过图片高度的约束控制图片显示与隐藏,上方间隙的约束的调整来控制所有cell下方的间隙一致
-(void)setStatus:(AZStatus *)status
{
    _status=status;

    // 设置数据
    ...    
    // 配图
    if (status.picture) {
        self.picture1View.hidden=NO;
        self.picture1View.image=[UIImage imageNamed:status.picture];
        self.pictureTop.constant=10;
        self.pictureHeight.constant=100;

    }else{
        self.picture1View.hidden=YES;
        self.pictureHeight.constant=0;
        self.pictureTop.constant=0;
    }



}
  • 设置tableViewCell的真实行高和估算行高
    // self-sizing(iOS8以后,两个方法一起使用)
    // 设置tableView的高度为根据设定的约束自动计算
    self.tableView.rowHeight=UITableViewAutomaticDimension;

    // 设置tableView的估算高度
    self.tableView.estimatedRowHeight=44;

3.支持iOS8之前

  • 如果cell内部有自动换行的label,需要设置preferredMaxLayoutWidth属性
- (void)awakeFromNib
{
    // 手动设置文字的最大宽度(目的是:让label知道自己文字的最大宽度,进而能够计算出自己的frame)
    self.text_label.preferredMaxLayoutWidth = [UIScreen mainScreen].bounds.size.width - 20;
}
  • 设置tableView的cell估算高度
// 告诉tableView所有cell的估算高度(设置了估算高度,就可以减少tableView:heightForRowAtIndexPath:方法的调用次数)
self.tableView.estimatedRowHeight = 200;
  • 在代理方法中计算cell的高度
AZStatusCell *cell;
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 创建一个临时的cell(cell的作用:根据模型数据布局所有的子控件,进而计算出cell的高度)
    if (!cell) {
        cell = [tableView dequeueReusableCellWithIdentifier:ID];
    }

    // 设置模型数据
    cell.status = self.statuses[indexPath.row];

    return cell.height;
}

- (CGFloat)height
{
    // 强制布局cell内部的所有子控件(label根据文字多少计算出自己最真实的尺寸)
    [self layoutIfNeeded];

    // 计算cell的高度
    if (self.status.picture) {
        return CGRectGetMaxY(self.pictureImageView.frame) + 10;
    } else {
        return CGRectGetMaxY(self.text_label.frame) + 10;
    }
}
iOS、UITableViewCell、自定义 UITableViewCell自定义等高 立即下载

相关推荐

详解ios中自定义cell,自定义UITableViewCell

本篇文章主要介绍了ios中自定义cell,自定义UITableViewCell,非常具有实用价值,需要的朋友可以参考下。

AZ_自定义不等高的cell

自定义不等高的cell 1.给模型增加frame数据(纯代码) 让ViewController继承UITableViewController,移除storyboard中的ViewController,新建一个UITableViewController让其与ViewController建立关联。 @interface ViewController:UITa...

aeajzkl1278的博客 251

达梦数据库连接报错6001网络通信异常

本文主要记录客户端连接达梦数据库报错6001网络通信异常问题分析过程、问题原因以及问题解决方法。

chen_zizi2025的博客 2773

【iOS】自定义cell及其复用机制

iOS的自定义cell是我们在App开发中最常用到的一个控件,接下来笔者将从其结构以及复用机制等方面对其展开论述。我们的UITableViewCell具有原生的控件,UITableViewCell内部有一个默认的子视图ContentView。而我们需要用UITabelCellStyle属性去决定用哪个子视图(对应属性以及在ContentView中的位置)。其结构图如下:这其中的每一行都是一个cell,其创建方法是新建一个UITableViewCell类然后重写我们的新建类中的方法。

weixin_72437555的博客 1416

CarPlay盒子选购避坑指南:为什么你的车机破解了却用不了?从USB设备ID说起

本文深入解析CarPlay盒子硬件兼容性问题,从USB设备ID匹配到车机适配逻辑,揭示破解成功却无法使用的根本原因。通过分析USB设备识别的核心要素和逆向工程usb_device_manager.xml文件,提供三种主流解决方案对比,并强调操作中的硬件保护机制,帮助车主避免常见陷阱。

weixin_30706691的博客 475

MLX90640 热成像 STM32

MLX90640 热成像

zhaocundang's blog 5007

iOS——自定义cell

end}}第一个函数用于对h文件里的控件及cell进行初始化,下面的函数用实现控件位置,在这个函数里也可以对控件添加其他方法或改变属性,但是不建议这么做,这么搞得话就失去了自定义的意义,切记这里面添加的都是固有的属性,如果在后面要用到的cell都有这些属性就可添加,否则别添加。}}结果最后,自定义cell的作用一定是让项目变的简单,简洁明了,如果在写自定义cell的时候发现还不如不自定义,那可能是方法错了。https。...

m0_62386635的博客 967

光斑大小控制【ZEMAX操作数】

在使用Zemax优化光学系统时,对成像的聚焦光斑大小进行限制,即弥散斑的大小; 一、RSCE(质心RMS光斑半径):二、RSCH(光线RMS光斑半径):

yh的博客 7870

【iOS】UI学习——cell的复用及自定义cell

本篇博客主要介绍了UI学习中cell的复用和自定义cell的相关内容,欢迎学习和指正!

2301_80467753的博客 2614

ESP8266+ITR8307实战:如何用反射式光电管实现5cm远距离检测(附避坑指南)

本文详细介绍了如何利用ESP8266的ADC功能与ITR8307反射式光电管,通过调制解调、硬件电路优化及软件同步采样策略,实现5cm稳定远距离检测。文章提供了完整的硬件设计、代码实现与调优避坑指南,有效解决了环境光干扰与信号衰减难题,适用于智能车、自动化等需要可靠非接触检测的项目。

rgv234567的博客 264

YOLOv11-Pose部署RK3588实战:人体姿态识别精度翻倍,边缘推理速度突破瓶颈

本教程从YOLOv11-pose模型的姿态识别训练,到RK3588的边缘量化部署,为你打造了一套“高精度+高实时性+低成本”的人体姿态分析解决方案。无论是健身动作纠正、智能安防行为检测,还是工业人员姿态监控,这套技术都能直接复用——你只需替换数据集与业务逻辑,即可快速落地专属的边缘AI姿态识别系统。如果你在实践中遇到任何卡点,欢迎随时交流。记住,人体姿态识别的价值在于“关键点准、推理快、部署易”,而这三者的平衡,正是你通过本教程能掌握的核心能力。

m0_64661770的博客 138

IOS开发-16.自定义不等高cell

1.纯代码1.模型重写// 1.给模型增加frame数据 // 1.1所有子控件的frame // 1.2cell的高度 @interface ZJStatus : NSObject /**** 模型属性文字\图片数据 ****/ // ...../**** 模型frame数据 ****/ /** 头像的frame */ @property (nonatomic, assign) CGRect ic

MrRightZJ的博客 952

14、PostgreSQL日志文件、系统统计与查询优化全解析

本文全面解析了PostgreSQL数据库中的系统统计、日志文件配置与查询优化技巧。详细介绍了如何利用pg_stat_statements模块进行性能监控,配置日志记录以发现潜在问题,并深入探讨了查询优化器的工作原理和优化策略。通过实际案例分析,展示了如何综合应用这些技术提升数据库性能。适合希望提升PostgreSQL性能与稳定性的数据库管理员和开发人员阅读。

efc123456的博客 94

iOS开发之有趣的UI —— 自定义不等高cell

一、静态cell和动态cell 一般比较固定的样式可通过storyboard中的静态cell或者动态cell进行操作,方便快捷高效。 静态cell创建方式 动态cell创建方式二、纯代码是实现自定义不等高cell 下面通过案例来实现用纯代码的方式来完成自定义不等高cell的实现。项目需求: 以微博为例,当别人发状态时,有的人发文字,有的人发文字和图片,那么如何实现这种方式呢?项目思路:

求知若渴,虚心若愚,努力前行,未来可期。 1492

【Bug已解决】Claude Team Plan 购买席位报错 Payment failed 解决方案

方案适用场景推荐指数检查账单历史状态排查的第一步⭐⭐⭐⭐⭐更换支付方式类型快速尝试是否能绕开问题⭐⭐⭐联系官方支持团队最终解决问题的正规渠道⭐⭐⭐⭐⭐临时过渡方案紧急用人需求的应急处理⭐⭐⭐关注官方修复进度确认属于系统性缺陷的场景⭐⭐⭐⭐Claude Team Plan 增购席位报的问题,社区反馈和实际排查表明很大概率属于平台计费系统在处理按比例分摊费用这类复杂计算链路时的系统性缺陷,而不是用户自身的支付信息填写有误。先排除自身账单历史是否存在异常。

一键难忘的博客 4184

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

iOS开发之有趣的UI —— iOS8之前和之后的自定义不等高cell

项目实施思路: 核心:通过设置最后一个元素的高度以及和底部的约束来控制不等高cell的高度。 1.创建项目,导入图片及plist文件。 2.创建数据模型,进行数据转模型 3.创建继承自UITableViewCell的自定义cell模型ZJStatusCell文件 4.创建storyboard,利用autolayout进行自动布局,并且让storyboard和ZJStatusCell建立相应联系 5.在控制器中完成相

求知若渴,虚心若愚,努力前行,未来可期。 2002

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

iOS学习之UI自定义cell(等高,不等高,自适应)

一、自定义Cell为什么需要自定义cell:系统提供的cell满足不了复杂的样式,因此:自定义Cell和自定义视图一样,自己创建一种符合我们需求的Cell并使用这个Cell。如下图所示的这些Cell都是通过自定义Cell样式实现的:自定义Cell的步骤:    1.首先创建一个继承于UITableViewCell的类:(这是一个简易的通讯录的自定义cell)@interface RootTable...

Mr_tangIT的博客 902

iOS-UI控件之UITableView(三)- 自定义不等高的cell

Storyboard_不等高 对比自定义等高cell,需要几个额外的步骤(iOS8开始才支持) 添加子控件和contentView之间的间距约束 设置tableViewCell的真实行高和估算行高 // 告诉tableView所有cell的真实高度是自动计算(根据设置的约束来计算) self.tableView.rowHeight = UITableViewAut...

weixin_30940783的博客 128

iOS-UI控件之UITableView(二)- 自定义不等高的cell

不等高的cell 给模型增加frame数据 所有子控件的frame cell的高度 @interface XMGStatus : NSObject /**** 文字\图片数据 ****/ // ..... /**** frame数据 ****/ /** 头像的frame */ @property (nonatomic, assign) CGRect iconFrame...

weixin_30454481的博客 65

自定义不等高cell—storyBoard或xib自定义不等高cell

1.iOS8之后利用storyBoard或者xib自定义不等高cell: 对比自定义等高cell,需要几个额外的步骤(iOS8开始才支持) 添加子控件和contentView(cell的contentView)之间的间距约束(需要代码控制约束) 设置tableViewCell的真实行高和估算行高 // 以下两行代码就被苹果称为self-sizing技术,可惜只能...

weixin_30949361的博客 122

iOS开发 —— MVVM设计模式

MVVM设计模式及思想 在 iOS 应用中日益增长的重量级视图控制器的问题。在典型的 MVC 应用里, 许多逻辑被放在 View Controller 里。  它们中的一些确实属于 View Controller,但更多的是所谓的“表示逻辑(presentation logic);  为了不让控制器日益增大,便于测试管理,便出现了MVVM. MVVM:它其实是一个 MVC

Bruce__Liu的博客 1334

iOS开发之有趣的UI —— MVVM设计模式

在 iOS 应用中日益增长的重量级视图控制器的问题。在典型的 MVC 应用里, 许多逻辑被放在 View Controller 里。 它们中的一些确实属于 View Controller,但更多的是所谓的“表示逻辑(presentation logic); 为了不让控制器日益增大,便于测试管理,便出现了MVVM. MVVM:它其实是一个 MVC 的增强版,并将表示逻辑从 Controller 移出放到一个新的对象里

求知若渴,虚心若愚,努力前行,未来可期。 2000

自定义不等高的cell(纯代码frame)

自定义不等高的cell(纯代码frame)标签(空格分隔): ios基础给模型增加frame数据 所有子控件的frame cell的高度 @interface JLStatus : NSObject /**** 文字\图片数据 ****/ // ...../**** frame数据 ****/ /** 头像的frame */ @property (nonatomic, assign) CGRect

maomaopanjiu的博客 600
上一篇: iOS 字典转模型
下一篇: iOS UITableView的刷新和编辑
azhang_coder
博客等级 码龄10年 1粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值