不等高cell的tableView界面搭建

一.搭建界面

1.界面分析
分析界面的层次结构,分析界面应该用什么控件来搭建

2.界面层次结构
分析之后,我们可以把这个界面分为四个模块(topView middleView commentView bottomView)
这种复杂的界面,我们一般称为:不等高cell

3.界面搭建方式
分析发现,界面大部分是不能确定的(文字高度,有没有图片,评论)
所以我们采用纯代码的方法来搭建界面
但是复杂的界面我们划分过之后,有些小模块里面的内容是固定的
这些固定的小模块我们可以采用xib来搭建

4.有些模块不确定是否显示,搭建的时候怎么处理?
在创建cell的时候,我们先把所有的模块添加进去,不需要的时候隐藏就行了

5.创建cell的代码写在哪里?
首先要自定义cell ,一般创建cell我们要做缓存处理,所以cell创建一般都要注册
通过类注册的本质是调用cell的initWithStyle:方法
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(nullable NSString *)reuseIdentifier
我们只需要在这个方法里面写代码就可以了
注意:调用这个方法,一定要调用super 方法

6.怎么确定通过类注册cell一定会调用initWithStyle:方法
在自定义cell的类里面重写这个方法,通过打印信息可以确定

7.为什么不在initWithFrame方法中创建cell?
initWithFrame方法只有当控件通过init方法或initWithFrame方法创建才会调用
而我们创建cell是通过initWithStyle:方法创建的

8.cell这么多模块,怎么搭建?
一个模块一个模块的搭建
先搭建topView模块(搭建界面,加载数据,处理数据),处理完业务逻辑之后再接着搭建下一个模块

二.topView界面搭建
1.搭建方法 xib搭建

2.用什么控件搭建
头像用ImageView, 昵称和时间还有正文分别用label

3.请求数据
查看接口文档,发送网络请求,解析数据,展示数据
展示数据,要设置cell的frame

4.cell的frame怎么确定?
xib中不能确定cell的frame,所以在xib中cell多大都没关系,但是一定要对子控件进行约束
xib中子控件的大小就是显示出来的实际大小
所以:我们加载xib的时候,要重新设置cell的frame

5.cell的高度怎么确定?
cell的高度需要我们手动来计算

6.cell的高度在哪里计算?
6.1不能再cellForRowAtIndexPath方法中计算(晚了)
6.2也不能在heightForRowAtIndexPath计算cell高度,这个方法调用频率非常高

7.计算cell的高度有哪些要求?
7.1一定要在heightForRowAtIndexPath调用之前,计算cell高度
7.2只需要计算一次

8.在哪里计算cell高度?
当请求数据成功的时候,就计算好cell高度
把cell的高度保存到一个数组中,然后在heightForRowAtIndexPath方法里面返回数组中对应的cell的高度
这种方法的缺点:控制器中代码太多,控制器更加重量级

9.也可以在模型里面计算cell的高度
一般来说,我们要做缓存处理,一般是对模型进行缓存
如果把计算代码放到模型里面,那么缓存数据就比较大,性能不好
还有一种方法:可以利用MVVM框架来计算cell高度

时间: 2024-11-02 23:29:01

不等高cell的tableView界面搭建的相关文章

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

1.iOS8之后利用storyBoard或者xib自定义不等高cell: 对比自定义等高cell,需要几个额外的步骤(iOS8开始才支持) 添加子控件和contentView(cell的contentView)之间的间距约束(需要代码控制约束) 设置tableViewCell的真实行高和估算行高 // 以下两行代码就被苹果成为self0sizing技术,可惜只能在iOS8及其之后应用 // 告诉tableView所有cell的真实高度是自动计算(根据设置的约束来计算) self.tableVie

不等高cell的搭建(一)

一.界面搭建 1.确定开发模式 如果界面是固定的,可以用xib 界面的一些内容不固定,就用纯代码 cell用什么方式去开发(我们采用纯代码和xib结合的方式) 2.划分层次结构 2.1 怎么划分? 按照功能划分 按照隐藏效果:在某些条件下,一些控件要一起隐藏,就可以放在同一模块中(前提是这些控件集中在一起) 2.2 分析界面发现cell的middleView和commentView不确定要不要显示 所以,cell采用纯代码方法搭建 3.自定义cell 3.1在创建cell的时候,就把所有可能显示

不等高cell搭建(二)

一.commentView模块搭建 commentView样式分为两种 1.xib搭建界面 1.1 因为评论的样式大体上一样,我们可以用同一个xib来处理 1.2 最热评论   用一个label来搭建 1.3 下面的内容不一样 1.3.1 文本样式的评论,下面也用一个label搭建就可以了 label约束设置为左右和上面固定间距,这样,高度会随着内容缩放,前提是设置label为0行 1.3.2 声音样式评论 声音样式的评论.高度是固定的 先添加一个view在文本评论的位置(根据数据再决定到时候哪

纯代码自定义不等高cell

数据模型.plist解析这里就不过多赘述. 错误思路之一: 通过在heightForRowAtIndexPath:方法中调用cellForRowAtIndexPath:拿到cell,再拿到cell的子控件的最大Y值的方法是不可取的.会出现死循环,因为cellForRowAtIndexPath:方法中会调用heightForRowAtIndexPath:方法.错误思路之二: 在layoutSubviews方法中,根据子控件的高度,计算cell的高度.先初始化一个变量为0为cell的高度,计算出来所

处理不等高TableViewCell

课题一:如何计算Cell高度 方案一:直接法(面向对象) 想知道妹纸爱你有多深?直接去问妹纸本人吧! 嗯!Cell也是一样的,想知道cell到底有多高?直接问Cell本人就好了.直接法,就是把数据布局到Cell上,然后拿到Cell最底部控件的MaxY值. 第一步:创建Cell并正确设置约束,使文字区域高度能够根据文字内容多少自动调整 第一步 - 添加好约束.gif 第二步:再给这个Cell添加点别的东东,就叫这个东东BottomCub了.为Cub添加好约束. 第二步 - 随便添加点什么.gif

iOSTableViewCell不等高的几种方法

方案一:直接法(面向对象) 直接法,就是把数据布局到Cell上,然后拿到Cell最底部控件的MaxY值. 第一步:创建Cell并正确设置约束,使文字区域高度能够根据文字内容多少自动调整 添加好约束 第二步:再给这个Cell添加点别的东东,就叫这个东东BottomCub了.为Cub添加好约束. 随便添加点什么 第三步:为这个Cell写一个返回Cell高度 - 也就是BottomCub最大Y值的方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

iOS之处理不等高TableViewCell的几种方法

课题一:如何计算Cell高度 方案一:直接法(面向对象) 直接法,就是把数据布局到Cell上,然后拿到Cell最底部控件的MaxY值. 第一步:创建Cell并正确设置约束,使文字区域高度能够根据文字内容多少自动调整 添加好约束 第二步:再给这个Cell添加点别的东东,就叫这个东东BottomCub了.为Cub添加好约束. 随便添加点什么 第三步:为这个Cell写一个返回Cell高度 - 也就是BottomCub最大Y值的方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

主流界面搭建原理(类似百思不得姐主界面)

一.界面搭建 1.项目需求 主界面能左右滚动,还能上下滚动,点击按钮跳转界面 2.分析界面 点击按钮跳转界面可以自定义UITabBarCotroller来实现 左右滚动,可以利用scrollView来实现  或 UICollectionView 上下滚动,用tableView可以实现 3.选择实现方案 方案一:   UITabBarCotroller + scrollView + tableView + titleView(TabBar条) UIScrollView弊端:没有做离屏渲染优化 使用

级联界面(推荐界面)搭建原理

一.整体布局 1.项目需求 点击左边cell,右边的cell数据更新 2.界面搭建 2.1交给两个控制器管理比较麻烦,点击一个控制器需要通知另外一个控制器 2. 2因此交给一个控制器管理比较好 2.3用xib搭建,左右各放一个tableView就可以了 3.开发顺序 先做左边的tableView,再做右边的,因为右边的数据是根据左边变化的 二.左边tableView界面搭建 1.自定义cell 左边一个指示器欧一个view   中间位置用label 2.设置数据源 两个tableView设置同一