2013-06-21 6 views
4

Я пытаюсь изменить высоту UITextView, который у меня есть в пользовательской ячейке для моего TableView.Изменение высоты UITextView в cellForRowAtIndexPath

«ОбзорКелл» - это идентификатор этой пользовательской ячейки в наконечнике, а также UITextView «postIntro» перетаскивается в наконечник.

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

Когда я пытаюсь изменить высоту «postImage», возникает одна и та же проблема.

Это мой код:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"OverviewCell"; 

    OverviewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

    Post *post = [self.posts objectAtIndex:[indexPath row]]; 

    if(!cell) 
    { 
    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"OverviewCell" owner:nil options:nil]; 

    for(id currentObject in topLevelObjects) 
    { 
     if([currentObject isKindOfClass:[OverviewCell class]]) 
     { 
      cell = (OverviewCell *)currentObject; 
      break; 
     } 
    } 
    } 

    [[cell postImage] setImage:[UIImage imageWithData:post.image]]; 
    [[cell postTitle] setText:post.title]; 
    [[cell postIntro] setText:post.intro]; 

    // Resize the intro textview so the text fits in. 
    CGRect frame = cell.postImage.frame; 
    frame.size.height = 20; //cell.postIntro.contentSize.height; 
    [cell.postIntro setFrame:frame]; 

    NSLog([NSString stringWithFormat:@"Height of textView on indexpath %i is set to %f", indexPath.row ,cell.postImage.frame.size.height]); 

    return cell; 

} 

Любые другие предложения, чтобы мой код приветствуется ...

ответ

2

Я, наконец, получил его работу, изменив ограничение UITextview в коде.

Я создал и IBOutlet, который прикреплен к ограничению UITextview.

IBOutlet NSLayoutConstraint * postContentHeightConstraint; 

После того, что я установить ограничение высоты заданной высоты для ячейки (contentSize).

self.postContentHeightConstraint.constant = self.postContent.contentSize.height; 

После установки новой высоты для ограничения, вызовите функцию layoutIfNeeded на UITextView

[self.postContent layoutIfNeeded]; 
+1

У меня была такая же проблема. То, как я исправил это, было подклассификация 'UITableViewCell', переопределив метод' drawRect: 'и установив высоту' UITextView' в 'textView.contentSize.height'. У меня уже был подкласс UITableViewCell, но вы, вероятно, могли бы просто подклассифицировать UITextView, если это все, что вам нужно. –

0

Реализовать tableView:heightForRowAtIndexPath: в вашем табличного делегата.

Update: Для того, чтобы обновить высоту UITextView после того, как он был создан, вызов [cell.postIntro setNeedsLayout] после установки рамы

+0

Эта функция уже есть. Это регулирует высоту ячейки, которая работает нормально. Я просто хочу изменить высоту 'UITextView' внутри ячейки (которая различна в каждой ячейке) –

+0

@ R.Schaaphuizen А я вижу. См. Мой обновленный ответ. – Turch

+0

Все еще не работает, меняют только то, что я прокрутил вниз и снова вернулся. –

0

Для изменения высоты UITextView, вызовите

[tableView beginUpdates]; 
[tableView endUpdates]; 

после настройки значения новые размеры для UITextView.

Вопросы this и this помогут с вашей проблемой.

Надеюсь, что ответ помог!