2015-01-30 2 views
0

Я загрузки пользовательских ячейки из XIb, в которой высота ячейки составляет 64, а затем с помощью heightForRowAtIndexPath изменить высоту ячейки, как следующее:заблуждение относительно высоты ячейки, UITableViewCell, IOS

- (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

Не могли бы вы показать код вашего 'UITableViewCell'? –

+0

my TableCell является подклассом UITableViewCell, и я обновил свой пост с его классом реализации (фактически, в файле реализации нет ничего нового) – tranvutuan

+0

Как-то вы можете установить высоту 'UITableViewCell' программно? –

ответ

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] в вашем случае.