实现cell处理

200 阅读2分钟

实现微博cell处理

  • 单条微博的处理 / 图片高度自适应

1.多张,单张图片高度的处理

  • 单条微博的视图模型

  • 如果没有任何父类,如果希望在开发时调试,输出调试信息,需要

  • 遵守CustomStringConvertible协议

  • 实现desciription 是计算型属性

    var description:String {
        return status.description
    }
    

    实现cell处理1

  • 视图列表模型 中引用视图模型 listViewModel -> aViewModel

    var arrary  = [WBStatusViewModel]()
    
    // for 循环遍历返回的数组,字典转模型
    for dict in list ??[ ] {
        guard let model = WBStatus.yymodel(with:dict) else { continue }
        //  根据转的model,初始化ViewModel,拼接到数组中
        arrary.append(WBStatusViewModel(model:model))
        // 如果是上拉刷新,数据拼接末尾,不是上拉刷新,拼接在数组前面
        if pullUp {
            self.statusList +=arrary
        }else{
            self.statusList  = arrary + self.statusList
        }    
    }
    
  • ViewModel中增加储值属性,使用内存换CPU,cell中不用重复计算

  • 增加会员image,认证image,数字字符串,储值属性,在cell中直接赋值

    实现cell处理2

  • 一个xib中拖出来N个View,如果功能独立,可以创建view方便处理

  • 创建view添加到Cell上

    实现cell处理3-1

2.图片的处理

  • 九宫格的创建,9个UIImageView for循环设置frame
    实现cell处理3
  • 九宫格视图的计算
    • 设置外边距,内边距
    • 根据外边距,内边距,设置view宽度,设置PictureView的宽度,高度(1*1)
    • 根据count计算列数,
    • 根据列数,计算view的高度
    func calcPictureViewSize(count:Int?)->CGSize{
        guard let count = count else{ return CGSize() }
        // 计算配图视图高度
        // 外边距
        let WBStatusPictureViewOuterMargin = CGFloat(12)
        /// 内边界
        let WBStatusPictureViewInnerMargin = CGFloat(3)
        /// view视图的W
            let height = WBStatusPictureViewOuterMargin + CGFloat(row) * pitureWith + CGFloat(row-1)*WBStatusPictureViewInnerMargin
        return CGSize(width: pictureItmeWidth, height: height)
    }
    
    实现cell处理4

3.单图的处理

  • 使用GCD调度组,下载一个图片之后处理单张图片的大小,保存下来

    • 在viewMolde 中增加方法,使用储值属性记录imageSize
      实现cell处理5
    • 在listModel每次下载完成一张图片之后进行调用刷新PictureSize
    • 等调度组完成之后,之后再回调。
      实现cell处理6
  • 当一个图过宽或者过窄的时候需要程序处理

    实现cell处理7
    实现cell处理8

  • 在PictureView 中设置statusMolde

  • 根据model的pictureSize 处理宽高,处理单图,处理无图

    实现cell处理9

4.cell的自动布局,和缓存行高

  • 自动布局

    • 设置tableView预估行高,和rowHeight 是自动计算
    • 有一个从上到下的约束,lable 到下边距是>= 一个数组
      let table = UITableView()
      table.rowHeight = UITableViewAutomaticDimension
      table.estimatedRowHeight = 300;
      
      实现cell处理10
  • 缓存行高

    • 取消xib 中>= 约束,设置为=约束
    • 取消table.rowHeight = UITableViewAutomaticDimension
  • 计算cell高度思路

    实现cell处理11

  • 计算文字,转发文字的长度

    实现cell处理12

  • 计算的高度,使用存储属性记录,设置好image更新高度后再计算一边

    实现cell处理13

  • 总结缓存行高

    实现cell处理14

5.选中的某个cell后快速的恢复到选中前的状态

  • tableView 如何让选中的某个cell后快速的恢复到选中前的状态(选中时的灰色动态消失)?

    实现cell处理15