iOS UITableView 解决估算行高和指定行高的矛盾

一般来说 在iOS 中若UITableViewCell 固定行高, 会通过

self.tableView.rowHeight = 44; 

这样来设置.

  • 若不是固定行高, 可能出现多种高度, 可以通过tableView的代理方法实现,在下面方法中实现:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ( ...条件1...) {
      return 20.f;
    }
    if ( ...条件2...) {
        return 40.f;
     }
  return 44.f;
}
  • 如果需要由系统自动估算行高, 可以通过设置以下代码实现:
self.tableView.estimatedRowHeight = 55;
self.tableView.rowHeight = UITableViewAutomaticDimension;

问题: 一般来说, 当用户实现了heightForRow的代理方法, 系统会跟据代理方法的返回值设置行高, 如果没有实现代理方法, 系统会根据self.tableView.rowHeight的值设置行高; 那么如果我们既想让系统自动估算行高, 又想指定满足一定条件下的行高, 我们该怎么办呢? 我们可以通过下面的方法实现:

  1. 设置估算行高:
self.tableView.estimatedRowHeight = 55;
self.tableView.rowHeight = UITableViewAutomaticDimension;
  1. 通过代理方法指定满足一定条件的行高:(重点: 代理方法的最后返回值一定要是UITableViewAutomaticDimension), 这样系统才知道这一行需要估算,代码如下:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ( ...条件1...) {
      return 20.f;
    }
    if ( ...条件2...) {
        return 40.f;
     }
  return UITableViewAutomaticDimension;
}

以上方法实际可用, 供参考.

你可能感兴趣的:(iOS UITableView 解决估算行高和指定行高的矛盾)