2015-10-26 3 views
0

У меня есть представление таблицы, где ячейки заполняются из xib-файлов. Существует два файла xib-файлов, отображающих разный контент в таблице.Изменение высоты столбца таблицы, основанной на множественной ячейке xib

Я хочу установить высоту строки для таблицы, основываясь на том, какая ячейка заполняется. Я использовал heightForRowAtIndexPath, чтобы установить высоту строки в зависимости от ячейки xib. Ниже приведен код:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CommentBoxCell *commentBoxCell; 
    UserCommentCell *userCommentCell; 

    if ([commentsAndTagsArray count]) { 

     if (!commentBoxCell){ 

      return commentBoxCell.bounds.size.height; 
     } 

     if (!userCommentCell){ 

      return userCommentCell.bounds.size.height; 
     } 
    } 
    //default height of the cell 
    return 44; 
} 

Выполнение этого ничего не отображает в представлении таблицы, только пустые ячейки. Без heightForRowAtIndexPath ячейки заполняются с правильным контентом, но с высотой строки tableview по умолчанию.

Как установить row height в tableview, чьи cells заселены из xib files?

+0

Как вы проверяете 'commentBoxCell' и' userCommentCell', если? Если посмотреть на свой код, он будет всегда ложным, поскольку он не инициализирован. – Iftikhar

+0

Этот метод всегда возвращает 44, потому что 'commentBoxCell' и' userCommentCell' являются 'nil'. Вам нужно использовать '[tableView dequeuReuseableCellWithIdentifier: atIndexPath:]'. – kientux

+0

Я использовал '[tableView dequeuReuseableCellWithIdentifier: atIndexPath:]' in 'cellForRowAtIndexPath' –

ответ

0

это выглядит как комментарииAndTagsArray делает не nill и имеет 1 или более объектов, поэтому он вводит первый, если после этого он ничего не делает, поскольку ваши ячейки не инициализированы, и там нет возврата по умолчанию.

Теперь heightForRowAtIndexPath: приходит до cellForRowAtIndexPath: так что у вас еще нет ячейки в данный момент, но вы должны знать, какую ячейку вы хотите представить, используя indexPath или любую другую логику, которую вы используете для определения типа ячейки для создания, почему бы вам не использовать эту логику для выбора высоты вместо этого?

0

Вы должны сначала создать экземпляр 2 клетки, как это где-то в вашем методе viewDidLoad:

commonetBoxCell = [[[NSBundle mainBundle] loadNibNamed:@"CommentBoxCellNib" owner:self options:nil] firstObject]; 
userCommentCell = [[[NSBundle mainBundle] loadNibNamed:@"UserCommentCellNib" owner:self options:nil] firstObject]; 

Затем следует обновить метод высоты, как это:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 

{

CGFloat height = 44.0; 
if (<this is a comment box cell>) { 
    [commonetBoxCell updateWithData]; 
    height = [commonetBoxCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height; 
} 
if (<this is a user comment cell>) { 
    [userCommentCell updateWithData]; 
    height = [userCommentCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height; 
} 

return height; 

+0

У меня есть классы ячеек, созданные в viewDidLoad. Я пробовал свой код, но он по-прежнему занимает высоту по умолчанию. –

+0

Я обновил код. Это была небольшая ошибка, потому что я использовал также локальную переменную «высота». Вы можете попробовать это сейчас. Он должен работать. –

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