我正在从xib加载一个自定义单元格,其中单元格的高度为64,然后使用heightForRowAtIndexPath
更改单元格的高度,如下所示:
- (void)viewDidLoad
{
[super viewDidLoad];
CGRect frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height);
UITableView *tableView = [[UITableView alloc] initWithFrame:frame style:UITableViewStylePlain];
tableView.delegate = self;
tableView.dataSource = self;
UINib *cellNIB = [UINib nibWithNibName:NSStringFromClass([TableCell class]) bundle:nil];
[tableView registerNib:cellNIB forCellReuseIdentifier:NSLocalizedString(@"TableCell", nil)];
[self.view addSubview:tableView];
}
(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 400 ;
}
在cellForRowAtIndex
,我打印出单元格的高度
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
TableCell *cell = [tableView dequeueReusableCellWithIdentifier:NSLocalizedString(@"TableCell", nil)];
NSLog(@"height at:%ld is %@",(long)indexPath.item,NSStringFromCGRect(cell.frame));
[cell setGradient];
return cell;
}
有趣的是,控制台给出了64的单元格高度(来自xib)
它应该是400吗?
任何想法为什么我得到64而不是400.欢迎任何评论在这里。 感谢
PS:
@implementation TableCell
- (void)awakeFromNib {
// Initialization code
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
@end
答案 0 :(得分:2)
实际上这很容易。
在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
中,一个单元格被重用(或在重用队列为空时创建)。
单元格初始高度为
但是,单元格会调整为您从- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
返回的值
从cellForRowAtIndexPath:
返回后。
所以你看到的行为是完全正确的。
提示:执行左- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
并在那里记录高度,在您的情况下,您会看到单元格已调整为[400]。