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高度

  • 相关阅读:
    Binary Search Tree Iterator 解答
    Invert Binary Tree 解答
    Min Stack 解答
    Trapping Raining Water 解答
    Candy 解答
    Jump Game II 解答
    Implement Hash Map Using Primitive Types
    Gas Station 解答
    Bucket Sort
    HashMap 专题
  • 原文地址:https://www.cnblogs.com/xiaotian666/p/5742560.html
Copyright © 2011-2022 走看看