Единственная проблема, которую я нашел с принятым ответом было то, что мы расПредеЛение UITextView каждый раз. Я обнаружил, что это вызвало проблемы с вводом в представление и немедленным обновлением текста, а также сохранением представления в качестве первого ответчика. Когда я попытался перезагрузить ячейку новой высотой, она попыталась бы добавить новый текстовый элемент.
Из-за этого я нашел несколько иной метод для достижения той же цели. Надеюсь, это другое решение может помочь людям, которые пытаются реализовать вышеуказанный код.
1) В файле заголовка определить переменную для высоты текста и TextView:
UITextView * _textView;
NSInteger _textHeight;
Установка переменной означает, что мы можем загрузить вид быть определенной высоты, если мы загружаем текст в textView, а также уменьшает сложность.
2) Загрузите вид текста и добавить его в нашу камеру
_textView = [[UITextView alloc] init];
_textView.delegate = self;
_textView.returnKeyType = UIReturnKeyDone;
_textView.font = [UIFont fontWithName:@"Helvetica" size:16];
if (![_user metaStringForKey:bBioKey].length) {
_textView.text = @"Placeholder text";
_textView.textColor = [UIColor lightGrayColor];
}
- (UITableViewCell *)tableView:(UITableView *)tableView_ cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath == 0) { // Add logic to choose the correct cell
if (_textView.superview != cell) {
[cell addSubview:_textView];
_textView.keepTopInset.equal = KeepRequired(7);
_textView.keepBottomInset.equal = KeepRequired(7);
_textView.keepRightInset.equal = KeepRequired(10);
_textView.keepLeftInset.equal = KeepRequired(70);
}
}
}
}
Использование keeplayout позволило нам сохранить наше текстовое поле, чтобы всегда оставаться на той же высоте, что и сота. Мы также добавляем только UITextView один раз.
3) Добавьте код для вычисления высоты текста
- (NSInteger)getHeightOfBio: (NSString *)text {
UILabel * gettingSizeLabel = [[UILabel alloc] init];
gettingSizeLabel.font = [UIFont fontWithName:@"Helvetica" size:16];
gettingSizeLabel.text = text;
gettingSizeLabel.numberOfLines = 0;
CGSize maximumLabelSize = CGSizeMake(240, 9999); // this width will be as per your requirement
CGSize expectedSize = [gettingSizeLabel sizeThatFits:maximumLabelSize];
return expectedSize.height;
}
Я пытался много, и нашел, что это работает лучший
4) Добавить некоторую логику в высоту ячейки, чтобы использовать это:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == 0) { // Set the height for our changing textView
return 30 + [self getHeightOfBio:_textView.text];
}
return 44;
}
очевидных нам нужно немного больше высоты, чем наша высота текста, поэтому я добавил дополнительное количество подушки, которые могут быть опробованы.
5) обновить вид каждый раз, когда персонаж набирается, чтобы проверить, если нужно увеличить размер:
- (void)textViewDidChange:(UITextView *)textView {
if ([self getHeightOfText:textView.text] != _textHeight) {
_textHeight = [self getHeightOfText:textView.text];
[self.tableView beginUpdates];
[self.tableView endUpdates];
}
}
В этом разделе мы получим высоту текста каждый раз, когда пользователь печатает.
Затем мы используем наше сохраненное значение и сравниваем текущее значение с сохраненным значением. Очевидно, что если они одинаковы, нет смысла обновлять представление. Если они отличаются, мы обновляем значение, а затем обновляем нашу таблицу.
Этот бит я нашел хороший ответ на stackOverflow, в котором показано, как мы можем обновлять только высоты таблицы вместо самой ячейки. Зачем обновлять ячейку, когда нам это не нужно? Это означает, что, как только это называется, высота ячейки обновляется, и она увеличивается хорошо.
В любом случае, я нашел, что это сработало действительно красиво и было достаточно простым, чтобы его можно было собрать или разделить на несколько частей и поместить в другие народы фрагменты кода.
Подтверждает принятый ответ, который был разграблен для разных предметов по пути, но я также надеюсь, что этот ответ поможет некоторым людям, которые испытывают те же трудности, что и я.
Да, я знаю, это, но я не знаю, как реализовать «авторезистентность» содержимого и самой ячейки :-(У вас есть пример кода? спасибо. Tony – Tony
А я вижу. У меня нет образца кода. попробуйте перезагрузить только эту ячейку, когда текст обновится, поэтому tableview пересчитывает высоту. Это может вызвать проблемы с тем, что текстовое поле уходит в отставку с первого ответчика. – Rengers