自从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];
网友评论