OC基础iOS进阶程序员

iOS回顾笔记(08) -- 自定义Cell的类型和创建步骤总结

2017-03-22  本文已影响242人  xiaoyouPrince

项目中我们常见的自定义cell主要分为两种

下面对这两类cell的创建方式简单记录各步骤。

等高Cell

等高cell通常有三种创建方式:

下面分别记录每种创建步骤:

1. storyboard自定义cell

2.xib自定义cell

3.代码自定义cell(使用frame)

4.代码自定义cell(使用autolayout)

非等高cell

非等高Cell的几个小重点知识

1. tableview返回行高的方法

/**
 *  精确返回每行cell的高度,此方法会真实计算对应高度值,并会一次性算出所有行高
 */
 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 100;
}

/**
 *  估测返回每行cell的高度,添加此方法可以修改调用顺序,不进行一次性精确计算,先返回cell,在根据每行的展示计算对应真实高度,用到哪个算哪个,提高性能
 */
  - (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(nonnull NSIndexPath *)indexPath
{
    return 200;
}

如果直接调用计算行高方法

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;

程序的调用顺序是

  1. 调用heightForRowAtIndexPath返回所有行高
  2. 调用cellForRowAtIndexPath返回对应行

如果先调用估算高度方法

 - (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(nonnull NSIndexPath *)indexPath;

程序的调用顺序是

  1. 调用estimatedHeightForRowAtIndexPath返回所有行高
  2. 调用cellForRowAtIndexPath返回对应行
  3. 调用heightForRowAtIndexPath返回对应的真实行高

所以使用估算行高的方法可提高效率。

【注意】
经过iOS 11适配的测试发现:

 iOS 11 中tableViewCell的高度计算顺序发生变化
 
 iOS 11 中数据源方法的调用顺序(无论有没有估算高度都是直接先执行cellForRow)
     estimatedHeightForRow --> cellForRow -- > heightForRow 或
     cellForRow -- > heightForRow
 
 iOS 10 以下有没有估算高度是不同的
     estimatedHeightForRow --> cellForRow -- > heightForRow
     heightForRow -- > cellForRow

2. 强制布局方法 : [cell layoutIfNeeded];

3. UILabel限制最大高度 : preferredMaxLayoutWidth

 - (void)awakeFromNib
{
    // 设置自己的昵称Label的最大自动布局的宽度为 cell 的宽度减去 20
    self.nameLabel.preferredMaxLayoutWidth = self.bounds.size.width - 20;
}

小结

上一篇 下一篇

猜你喜欢

热点阅读