今天在使用自定义UITableViewCell时发生一个问题,我在代理方法中重新改变了UITableViewCell的高度,代码如下:
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
NSInteger section=indexPath.section;
if (section==0) {
return 80;
}else{
return 50;
}
}
然后在重写UITableViewCell
的-(instancetype)initWithFrame:(CGRect)frame
方法,并在方法中添加了几个几个控件,结果发现控件的大小、位置还是按照UITableViewCell
高度为44来计算的。原因是-(instancetype)initWithFrame:(CGRect)frame
方法先调用,而-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
方法后调用,所以在调用-(instancetype)initWithFrame:(CGRect)frame
方法时,UITableViewCell
高度的高度还是44。
解决方法是:在自定义UITableViewCell
类中涉及到UITableViewCell
的高度、宽度的设置,要放在layoutSubviews
中。