UITableViewCell高度动态变化

自从iOS8开始,UITableView的渲染过程改为先渲染cell再计算其高度height,因此,在DataSource
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

里设置好响应的cell后,其高度可以在UITableView的代理方法
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
通过自定义cell中的类方法来获取。例如:

@interface CustomTableCell : UITableViewCell+(CGFloat)height;@end

当然,这里面的height是根据cell的一些setter方法来动态计算出来的。
而在iOS8之前,UITableView的渲染是先计算cell的高度height,再具体渲染cell,因此我们只能在代理方法
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
中先创建cell,然后给cell塞要展示的数据,动态算出cell的高度后,再拿这个高度返回即可。因此,针对iOS8之前的系统,我们要做一些额外的处理:

if (!isiOS8Later) {
static CustomCell *cell = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    // 新建cell
    sizingCell = [[[UINib nibWithNibName: CustomCell bundle:nil] instantiateWithOwner:nil options:nil] objectAtIndex:0];
});
// 设置cell的数据
cell.data = data; 
}
return [CustomCell height];

你可能感兴趣的:(UITableViewCell高度动态变化)