自從iOS8開始辈挂,UITableView的渲染過程改為先渲染cell再計算其高度height,因此按声,在DataSource
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
里設(shè)置好響應(yīng)的cell后膳犹,其高度可以在UITableView的代理方法
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
通過自定義cell中的類方法來獲取。例如:
@interface CustomTableCell : UITableViewCell+(CGFloat)height;@end
當(dāng)然签则,這里面的height是根據(jù)cell的一些setter方法來動態(tài)計算出來的须床。
而在iOS8之前,UITableView的渲染是先計算cell的高度height渐裂,再具體渲染cell豺旬,因此我們只能在代理方法
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
中先創(chuàng)建cell,然后給cell塞要展示的數(shù)據(jù)柒凉,動態(tài)算出cell的高度后族阅,再拿這個高度返回即可。因此膝捞,針對iOS8之前的系統(tǒng)坦刀,我們要做一些額外的處理:
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];
});
// 設(shè)置cell的數(shù)據(jù)
cell.data = data;
}
return [CustomCell height];