Componente ITUextView comportamiento iOS 7 vs iOS 8

Tengo una UITextView que en iOS 7 se comporta bien. En iOS 8 se comporta raro.

Cuando ingresa text que se convierte en dos líneas, actualizo el tamaño de inputView, que contiene la vista de text. También actualizo el tamaño de la vista de text, pero de alguna manera parece desplazarse hacia la primera línea; Sin embargo, esto no se refleja en su tamaño.

Video de comportamiento en iOS 7 (correcto): https://www.dropbox.com/s/rr4pea6wudobmk8/iOS7.mov

Video para comportamiento en iOS 8: https://www.dropbox.com/s/iyqrsp41uz5mn85/iOS8.mov

He configurado [self setAutomaticallyAdjustsScrollViewInsets:NO]; , pero sin cambios. Esto no me ayudó: ¿Qué está causando este recuadro de contenido no deseado con UITextView en iOS 8 (no existe en iOS 7)?

Hay los resultados de mi NSLog en iOS8:

 2014-12-22 02:02:48.104 Date For Date[68577:10129965] DID BEGIN: textContainerInset Top: 8.000000 - contentInset Bottom: 0.000000 - scrollIndicatorInset: 10.000000 2014-12-22 02:02:50.579 Date For Date[68577:10129965] DID CHANGE: textContainerInset Top: 8.000000 - contentInset Bottom: 0.000000 - scrollIndicatorInset: 10.000000 2014-12-22 02:02:50.768 Date For Date[68577:10129965] DID CHANGE: textContainerInset Top: 8.000000 - contentInset Bottom: 0.000000 - scrollIndicatorInset: 10.000000 2014-12-22 02:02:50.960 Date For Date[68577:10129965] DID CHANGE: textContainerInset Top: 8.000000 - contentInset Bottom: 0.000000 - scrollIndicatorInset: 10.000000 2014-12-22 02:02:51.168 Date For Date[68577:10129965] DID CHANGE: textContainerInset Top: 8.000000 - contentInset Bottom: 0.000000 - scrollIndicatorInset: 10.000000 2014-12-22 02:02:52.145 Date For Date[68577:10129965] DID CHANGE: textContainerInset Top: 8.000000 - contentInset Bottom: 0.000000 - scrollIndicatorInset: 10.000000 2014-12-22 02:02:52.408 Date For Date[68577:10129965] DID CHANGE: textContainerInset Top: 8.000000 - contentInset Bottom: 0.000000 - scrollIndicatorInset: 10.000000 

Este es mi código:

 - (void)textViewDidBeginEditing:(UITextView *)textView { [textView becomeFirstResponder]; if(!self.previousTextViewContentHeight) self.previousTextViewContentHeight = textView.contentSize.height; [self _scrollToBottom:YES]; NSLog(@"DID BEGIN: textContainerInset Top: %f - contentInset Bottom: %f - scrollIndicatorInset: %f", textView.textContainerInset.top, textView.contentInset.top, textView.scrollIndicatorInsets.top); } - (void)textViewDidEndEditing:(UITextView *)textView { [textView resignFirstResponder]; } - (void)textViewDidChange:(UITextView *)textView { // Textfield NSLog(@"DID CHANGE: textContainerInset Top: %f - contentInset Bottom: %f - scrollIndicatorInset: %f", textView.textContainerInset.top, textView.contentInset.top, textView.scrollIndicatorInsets.top); CGFloat maxHeight = [JSMessageInputView maxHeight]; CGFloat textViewContentHeight = MIN(textView.contentSize.height, maxHeight); CGFloat changeInHeight = textViewContentHeight - self.previousTextViewContentHeight; self.previousTextViewContentHeight = MIN(textViewContentHeight, maxHeight); if(changeInHeight != 0.0f) { textView.frame = CGRectMake(6, 3, textView.frame.size.width, textView.frame.size.height + changeInHeight); textView.contentInset = UIEdgeInsetsMake(0.0f, 0.0f, 0.0f, 0.0f); [textView setContentSize:CGSizeMake(textView.contentSize.width, textView.contentSize.height + changeInHeight)]; // Change table UIEdgeInsets insets = UIEdgeInsetsMake(0, 0.0f, self.bubbleTable.contentInset.bottom + changeInHeight, 0.0f); self.bubbleTable.contentInset = insets; self.bubbleTable.scrollIndicatorInsets = insets; [self _scrollToBottom:YES]; // Change input view CGRect inputViewFrame = self.inputView.frame; self.inputView.frame = CGRectMake(0.0f, inputViewFrame.origin.y - changeInHeight, inputViewFrame.size.width, inputViewFrame.size.height + changeInHeight); } self.inputView.sendButton.enabled = ([textView.text trimWhitespace].length > 0); } 

¿Qué estoy haciendo mal?

¿Por qué no usa la function UITextView sizeThatFits ? Calculará automáticamente la altura correcta con todos los rellenos:

 CGFloat textViewHeight = [textView sizeThatFits:CGSizeMake(textView.frame.size.width, MAXFLOAT)].height; 

Intente textView.textContainer.lineFragmentPadding = 0; además de textView.textContainerInset = UIEdgeInsetsZero; . Esto hace que mi text abraza los límites de UITextView.