UITableView в iOS 7 не прокручивается до правильного местоположения при редактировании UITextView в ячейке
У меня есть табличное представление со статическими ячейками. Одна ячейка содержитUITextView
иheightForRowAtIndexPath:
вычисляется динамически, так что ячейка всегда достаточно высока, чтобы вместить текст (эта часть потребовала некоторой работы под iOS 7, фактически, так как больше невозможно просто запросить textView для ееcontentSize
).
Когда я нажимаю в текстовом представлении, чтобы начать редактирование, клавиатура анимируется на место, contentInsets в tableView автоматически настраиваются для учета этого (т. Е. Нижняя вставка 216px для портретной ориентации iPhone), курсор / каретка становится видимой, и тогда табличное представлениепрокручивает в другое место, Это в конечном итоге выглядит как отказов.
Вот видео этого в симуляторе:https://www.dropbox.com/s/htdbb0t7985u6n4/textview-bounce.mov
Обратите внимание, что на секунду каретка находится чуть выше клавиатуры. Я регистрировал табличное представлениеcontentOffset
и я вижу, как оно прокручивается до нужного значения, а затем внезапно «оборачивается» и прокручивается назад.
Как ни странно, если я включаю медленную анимацию в симуляторе, проблема исчезает;contentOffset
разворот не происходит, и все работает так, как я ожидаю (то есть поведение iOS 6).
Вот видео с медленной анимацией:https://www.dropbox.com/s/nhn7vspx86t4exb/textview-nobounce.mov
Замечания по реализации:
Текстовое представление имеет розовый цвет и имеет ограничения AutoLayout, которые держат его прикрепленным к ячейке на расстоянии 0 (кроме левой стороны, которая составляет 10 точек)я используюboundingRectWithSize:
рассчитать высоту представления таблицы, корректируя lineFragmentPadding и любые верхние / нижние вставки. Кажется, работает.Я установил textView, чтобы не быть прокручиваемым, но ничего не заметил, когдаscrollEnabled
== ДАЭто контроллер табличного представления иautomaticallyAdjustsScrollViewInsets
== ДА