zoukankan      html  css  js  c++  java
  • 不等高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高度

  • 相关阅读:
    ActiveX控件的注册和反注册
    谷歌浏览器调用activex控件方法
    VC 中的ATL ActiveX 和 MFC ActiveX 有什么区别
    DirectX介绍(转)
    最简单的基于FFMPEG的图像编码器(YUV编码为JPEG)(转)
    统计Visual Studio项目的代码行数
    【Sqlite3】sqlite_sequence表(转)
    linuxunix系统下的字符操作
    tif
    字符串截取
  • 原文地址:https://www.cnblogs.com/xiaotian666/p/5742560.html
Copyright © 2011-2022 走看看