2015-01-11 3 views
1

У меня есть UITextView в UITableViewCell в раскадровке. Затем я добавил ограничение на все 4 стороны UITextView.Авто размер ячейки на основе UITextView

В приведенном ниже коде я попытался сделать textView динамически меняющимся, когда пользователь вводит текст. Я уверен, что сработал успешно. Но проблема в том, что клетка - нет. Bellow - это код, который я пробовал, но безуспешно.

-(void)viewDidLoad 
{ 
    tableView.rowHeight = UITableViewAutomaticDimension; 
    tableView.estimatedRowHeight = 44; 
} 

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 
{ 
    if (textView == myTextView) 
    { 
     [self textViewFitToContent:myTextView]; 

     [self.tableView beginUpdates]; 
     [self.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForItem:1 inSection:0]] withRowAnimation:UITableViewRowAnimationNone]; 
     [self.tableView endUpdates]; 
    } 
    return YES; 
} 

- (void)textViewFitToContent:(UITextView *)textView 
{ 
    CGFloat fixedWidth = textView.frame.size.width; 
    CGSize newSize = [textView sizeThatFits:CGSizeMake(fixedWidth, MAXFLOAT)]; 
    CGRect newFrame = textView.frame; 
    newFrame.size = CGSizeMake(fmaxf(newSize.width, fixedWidth), newSize.height); 
    textView.frame = newFrame; 
    textView.scrollEnabled = NO; 
} 

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

{ 
    return myTextView.frame.size.height + 40; 
} 

Я новичок, поэтому, пожалуйста, не слишком грубый на меня.

Благодаря

+0

Все ячейки меняют высоту, когда предполагается только один. –

ответ

-1

В раскадровке, выберите вид текста и в инспекторе размера ищет вариант приоритета обниматься содержание. Приоритет обхода контента может варьироваться от 0 до 1000.

Держите приоритет содержимого в текстовом режиме (особенно для вертикальной секции) выше приоритета содержимого, отображающего представление содержимого ячейки, в которой находится текстовое представление.

+0

Я не совсем понимаю –

0

Ваш код в порядке, безупречный и эффективный. Не видя ваших объявленных переменных, я считаю, что причина, по которой ячейка не изменяет размер, заключается в том, что вы используете метод heightForRowAtIndexPath, который возвращает высоту неправильного UITextView. Вместо txtSymptoms, который не используется нигде в коде изменения размера, вместо этого вы должны использовать myTextView, который, когда пользователь редактирует текст, запустит перезагрузку tableView.

+0

Это было мое плохо. Я думал, что я изменил все имя textViews в переполнении стека. Наверное, я забыл об этом. Но я не думаю, что проблема –

+0

Все текстовые элементы изменяют размер. который wierd –

0

Этот фрагмент твоего:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return myTextView.frame.size.height + 40; 
} 

От остальной части кода, myTextView, кажется, особый вид текста, который вы добавляете текст и изменение размера, но этот метод использует эту большую высоту для проклейки, поэтому все ваших клеток растут выше.

+0

Есть ли способ исправить это? –

+0

Если вы используете iOS8 для автоматического выбора размеров, то вам совсем не нужен этот метод, убедитесь, что в раскадровке для метки используется автоматическая настройка ширины. – Abizern

+0

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

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