2013-05-29 3 views
1

В моем приложении iPhone у меня есть четыре типа ячеек. Каждая ячейка имеет собственную высоту. Я хотел бы задать высоту строки для каждого вида ячейки таблицы, но он выходит из строя в этом методе:Ошибка в высоте строки UITableView

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; 
    NSLog(@"%@", cell); 
    if([cell.reuseIdentifier isEqualToString:PastEventWICellIdentifier]){ 
     return 56; 
    } 
    if([cell.reuseIdentifier isEqualToString:PastEventWOICellIdentifier]){ 
     return 56; 
    } 
    if([cell.reuseIdentifier isEqualToString:EventWICellIdentifier]){ 
     return 112; 
    } 
    if([cell.reuseIdentifier isEqualToString:EventWOICellIdentifier]){ 
     return 112; 
    } 
    return 56; 
} 

Как я могу решить эту проблему?

+0

и сообщение о сбое? – jcesarmobile

+0

try return 112.0f; –

+0

Почему бы не дифференцировать ячейки на основе свойства datasource для строки, вместо вызова 'cellForRowAtIndexPath:'? – Amar

ответ

7

Вы не можете получить ячейки, используя cellForRowAtIndexPath внутри метода heightForRowAtIndexPath, потому что ячеек еще нет. Они будут созданы после того, как будут установлены их высоты.

Вы можете установить высоты ячеек в зависимости от их местоположения, используя indexPath.row.

0

Вы не можете использовать метод cellForRowAtIndexPath, этот метод вызывается до cellForRowAtIndexPath, поэтому ячейки не существуют. У вас должен быть список высоты, уже вычисленный при вызове heightForRowAtIndexPath. Не забудьте не загружать весь список в tableview, потому что этот метод (heightForRowAtIndexPath) занимает больше времени, чтобы загрузить таблицуview ...

Смежные вопросы