Я думаю, что основная причина заключается в том, что estimatedRowHeight
используется для предположения о базовом UIScrollView.contentOffset
, но это всегда будет ошибочным по определению, поскольку это оценка. Действительные высоты строк полностью различаются в зависимости от содержимого ячейки и ориентации устройства.
Даже если я реализую estimatedHeightForRowAtIndexPath
, чтобы обеспечить более близкие оценки, глюки все еще существуют.
Итак, когда вы начинаете вверху и прокручиваете вниз, все хорошо, потому что TableView изучает фактические высоты ячеек по мере того, как он держит содержимое в соответствии с положениями ячейки. Но как только вы вращаете все реальные высоты ячеек, чтобы UITableView
теперь вышел из строя, он не знает, куда прокручиваться.
Но есть и еще более странные вещи, иногда ячейка UITextField
оказывается поверх другой ячейки и остается там...
Во всяком случае, я отбросил все до простого примера.
https://github.com/trapper-/autolayout-glitch
- Протестируйте с iPhone и, если используете симулятор, включите клавиатуру программного обеспечения.
- Вы увидите много визуальных сбоев, просто играющих вокруг прокрутки, выбора полей и поворота.
- Для простого повторяемого примера.
- Прокрутите вниз.
- Выберите одну из последних двух
UITextField's
, чтобыUITableView
нужно прокрутить, чтобы убедиться, что поле будет видимым. - Поверните устройство.