混淆细胞的高度,UITableViewCell,iOS

时间:2015-01-30 16:17:58

标签: objective-c uitableview ios8

我正在从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

1 个答案:

答案 0 :(得分:2)

实际上这很容易。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath中,一个单元格被重用(或在重用队列为空时创建)。

单元格初始高度为

  • 44pt(对于完全由代码加载的单元格)
  • 您在笔尖中指定的高度(在您的情况下为64pt)

但是,单元格会调整为您从- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath返回的值 从cellForRowAtIndexPath:返回后。

所以你看到的行为是完全正确的。

提示:执行左- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
并在那里记录高度,在您的情况下,您会看到单元格已调整为[400]。