UITextView в UITableViewCell плавного автоматического изменения размера показывает и скрывает клавиатуру на iPad, но работает на iPhone

Я реализовал пользовательский UITableViewCell, который включает в себя UITextView, который автоматически изменяет размеры в зависимости от типа пользователя, аналогично полю «Примечания» в приложении «Контакты». Он нормально работает на моем iPhone, но когда я тестирую его на iPad, у меня возникает очень странное поведение: когда вы добираетесь до конца строки, клавиатура прячется на миллисекунду и затем сразу же снова показывает себя. Я бы списал это как причудливую ошибку, но на самом деле это приводит к некоторой потере данных, поскольку, если вы печатаете, она теряет один или два символа. Вот мой код:

Код
// returns the proper height/size for the UITextView based on the string it contains.
// If no string, it assumes a space so that it will always have one line.
- (CGSize)textViewSize:(UITextView*)textView {
     float fudgeFactor = 16.0;
     CGSize tallerSize = CGSizeMake(textView.frame.size.width-fudgeFactor, kMaxFieldHeight);
     NSString *testString = @" ";
     if ([textView.text length] > 0) {
          testString = textView.text;
     }
     CGSize stringSize = [testString sizeWithFont:textView.font constrainedToSize:tallerSize lineBreakMode:UILineBreakModeWordWrap];
     return stringSize;
}

// based on the proper text view size, sets the UITextView's frame
- (void) setTextViewSize:(UITextView*)textView {
     CGSize stringSize = [self textViewSize:textView];
     if (stringSize.height != textView.frame.size.height) {
          [textView setFrame:CGRectMake(textView.frame.origin.x,
                                        textView.frame.origin.y,
                                        textView.frame.size.width,
                                        stringSize.height+10)];  // +10 to allow for the space above the text itself 
     }
}

// as per: https://stackoverflow.com/questions/3749746/uitextview-in-a-uitableviewcell-smooth-auto-resize
- (void)textViewDidChange:(UITextView *)textView {

     [self setTextViewSize:textView]; // set proper text view size
     UIView *contentView = textView.superview;
     // (1) the padding above and below the UITextView should each be 6px, so UITextView's
     // height + 12 should equal the height of the UITableViewCell
     // (2) if they are not equal, then update the height of the UITableViewCell
     if ((textView.frame.size.height + 12.0f) != contentView.frame.size.height) {
         [myTableView beginUpdates];
         [myTableView endUpdates];

         [contentView setFrame:CGRectMake(0,
                                          0,
                                          contentView.frame.size.width,
                                          (textView.frame.size.height+12.0f))];
     }
}

- (CGFloat)tableView:(UITableView  *)tableView heightForRowAtIndexPath:(NSIndexPath  *)indexPath {
     int height;
     UITextView *textView = myTextView;
     [self setTextViewSize:textView];
     height = textView.frame.size.height + 12;
     if (height < 44) { // minimum height of 44
          height = 44;
          [textView setFrame:CGRectMake(textView.frame.origin.x,
                                        textView.frame.origin.y,
                                        textView.frame.size.width,
                                        44-12)];
      }
      return (CGFloat)height;
}
Проблемы

Итак, вот что происходит

Этот код работает на 100% правильно на моем iPhone и в симуляторе iPhone. Когда я набираю текст, UITextView растет плавно, а UITableViewCell вместе с ним.Однако на симуляторе iPad все становится чокнутым. Он отлично работает, когда вы печатаете в первой строке, но когда вы добираетесь до конца строки, клавиатура исчезает, а затем сразу же появляется снова, так что если пользователь продолжает набирать текст, приложение пропускает один или два символа.Вот некоторые дополнительные заметки о странном поведении, которое я заметил, которые могут помочь объяснить это:Кроме того, я обнаружил, что удаление линий[myTableView beginUpdates]; [myTableView endUpdates]; в функцииtextViewDidChange:(UITextView *)textView заставляет UITextView правильно расти, а также не отображает и не скрывает клавиатуру, но, к сожалению, тогда UITableViewCell не увеличивается до нужной высоты.ОБНОВИТЬ: Следующийэти инструкцииТеперь я могу остановить странное движение текста; но клавиатура все еще прячется и показывает, что очень странно.

У кого-нибудь есть идеи относительно того, как заставить клавиатуру непрерывно показывать, а не прятаться и показывать, когда вы доберетесь до конца строки на iPad?

П.С .: Меня не интересует использование ThreeTwenty.

Ответы на вопрос(2)

Ваш ответ на вопрос