2014-11-12 4 views
0

У меня прототип ячейки. У меня есть несколько ярлыков внутри. Я использую auto-layout для изменения размера одной из ярлыков, чтобы изменить высоту и соответствовать контенту. Мне нужно изменить размер всего UITableViewCell.Как изменить динамическую высоту UITableViewCell с помощью heightForRowAtIndexPath?

О событии heightForRowAtIndexPath Я создаю фиктивную ячейку для расчета высоты. Я использую следующий example. Я должен установить надлежащее высота. Моя проблема заключается в том, что она возвращает 0.

Проблемы в моей точке зрения, в следующем коде:

CGSize size = [self.prototypeCell.contentView 
       systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]; 
return size.height+1; 

Вид содержания имеет высоту 44, но этот метод возвращает 0. В результате I см ячейку бушель высота 1.

EDIT:

Мой код для всего метода:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [self configureCell:self.prototypeCell forRowAtIndexPath:indexPath]; 

    self.prototypeCell.bounds = CGRectMake(0.0f, 0.0f, CGRectGetWidth(self.twDetails.bounds), CGRectGetHeight(self.prototypeCell.bounds)); 

    //[self.prototypeCell layoutIfNeeded]; 
    [self.prototypeCell.contentView setNeedsLayout]; 
    [self.prototypeCell.contentView layoutIfNeeded]; 

    CGSize size = [self.prototypeCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]; 

    return size.height+1; 
} 

EDIT 2:

Я думаю, что я неправильно называя configureCell снова в этом месте:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    PESvcPaymentDetailsCell *dispositionCell = [tableView dequeueReusableCellWithIdentifier:dispositionCellIdentifier forIndexPath:indexPath]; 

    if(indexPath.row <= singApp.operationPostpaidDispositionsList.dispositionsCount - 1) { 

     [self configureCell:dispositionCell forRowAtIndexPath:indexPath]; 

    } 
    else { 
    } 

    //[tvCellsArray addObject:dispositionCell]; 
    return dispositionCell; 
} 

Так может быть, я инициализирует его снова, делая это?

+0

Вы используете AutoLayout? – l0gg3r

+0

Да, @ l0gg3r. Я использую авто-макет. Я попытался использовать его для изменения размера, но в этом случае ярлык с дополнительными данными не растягивался. – new2ios

ответ

0

Попробуйте это. Вам необходимо повторно настроить пользовательскую ячейку для indexPath и вернуть ее высоту.

В вашем configureCell: forRowAtIndexPath: method - убедитесь, что вы добавляете какие-либо представления/метки в contentView ячейки.

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

    // Instantiate a mock custom cell 
    PESvcPaymentDetailsCell *dispositionCell = [[PESvcPaymentDetailsCell alloc] init]; 

    // Configure it based on the index path 
    [self configureCell:dispositionCell forRowAtIndexPath:indexPath]; 

    // Make sure its frame is updated 
    [dispositionCell.contentView setNeedsLayout]; 
    [dispositionCell.contentView layoutIfNeeded]; 

    // Return the height 
    return [dispositionCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height; 

} 
+0

Извините, @Matt Tang, но он все равно возвращается 0. У меня есть только layoutIfNeeded, но только на самой прототипной ячейке. – new2ios

+0

Вам действительно нужно установить фактическую границу prototypeCell? Это может помешать кадру contentView. Не могли бы вы прокомментировать, где вы установили self.prototypeCell.bounds? –

+0

Только здесь, @Matt Tang, я установил это 'bounds'. Я использую готовый пример (как упоминалось в моем вопросе). Я думал, что когда я создаю «прототип» и заполню его своими данными, у меня будут правильные границы. И используя эту команду, я возьму их и выберу из нее нужную высоту. После этого я снова выполняю 'configureCell' в методе' cellForRowAtIndexPath' (где я получаю свою реальную ячейку). – new2ios

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