Ответ 1
Мне удалось точно воссоздать вашу проблему случайно и удалось ее исправить, но ценой отсутствия полей.
Вероятно, прыжки происходят, если вы используете ограничения на основе маржи или любые поля для вашего вида контейнера. Если вы удаляете относительную часть поля по границам, прыжки исчезают.
Очень странно, но, похоже, проблема. Как только я добавлю ограничение относительного ограничения для контейнера, проблема вернется. Снимите его, и дисплей вернется к плавной прокрутке.
Казалось бы, это ошибка, и я думаю, вам нужно будет поднять отчет об ошибке с Apple.
Update:
Глядя снова, проблема, кажется, появляется, как только вид контейнера не является полной шириной экрана. Добавление любого вида поля в представление контейнера (с помощью макета по отношению к марже или путем установки ненулевого смещения при ограничении) приводит к скачкообразному поведению.
Update:
Что-то, казалось бы, было бы принципиально нарушено с помощью прокрутки UITableView внутри контейнера, который имеет какой-либо запас. Если вы переопределите делегат прокрутки, смещение/границы содержимого представления прокрутки будут изменены в момент, когда обновление будет запущено. Вот некоторые отладки, показывающие проблему
Start pulling down:
Scroll bounds = {{0, -127.33333333333333}, {374, 423}}
Scroll pos = [0.000000,-127.333333]
Scroll bounds = {{0, -127.66666666666667}, {374, 423}}
Scroll pos = [0.000000,-127.666667]
Scroll bounds = {{0, -128.33333333333334}, {374, 423}}
Scroll pos = [0.000000,-128.333333]
Ok before here ------->
Activity spinner becomes fully populated. Jump in scroll position upwards.
Scroll bounds = {{0, -104}, {374, 423}}
Scroll pos = [0.000000,-104.000000]
Scroll position corrects itself
Scroll bounds = {{0, -128.33333333333334}, {374, 423}}
Scroll pos = [0.000000,-128.333333]
Scroll position jumps the other direction by the same amount
Scroll bounds = {{0, -151.33333333333334}, {374, 423}}
Scroll pos = [0.000000,-151.333333]
Value changed target action fires. Bounds seem to reset (think 44 is height of refresh control
Scroll bounds = {{0, -44}, {374, 423}}
Scroll pos = [0.000000,-44.000000]
Corrects back
Scroll bounds = {{0, -151.33333333333334}, {374, 423}}
Scroll pos = [0.000000,-151.333333]
Fully corrects to the right scroll position by jumping back.
Ok after here ------>
Scroll bounds = {{0, -128.66666666666666}, {374, 423}}
Scroll pos = [0.000000,-128.666667]
Scroll bounds = {{0, -129}, {374, 423}}
Scroll pos = [0.000000,-129.000000]
Scroll bounds = {{0, -129.33333333333334}, {374, 423}}
Scroll pos = [0.000000,-129.333333]
Scroll bounds = {{0, -129.66666666666666}, {374, 423}}
Scroll pos = [0.000000,-129.666667]
Scroll bounds = {{0, -130}, {374, 423}}
Заключение
Кажется, нелегко найти способ обойти это. Я попытался создать свой собственный контроллер табличного представления, и прыжки уходят, но заменяется другим эффектом: при этом, когда вы прокручиваете верхнюю ячейку, исчезает, а затем снова появляется. Я предполагаю, что это относится к одной и той же внутренней проблеме, просто выражаясь по-разному.
Unfortunatley выглядит так, будто вам, возможно, придется мириться с этим эффектом или пойти на нет. Я бы поднял отчет об ошибке с Apple.
Только альтернативный вариант - создать поля в вашем UITableViewCells. Вы можете сделать представление содержимого ячейки четким фоном и ввести левое и правое поле в свои ячейки, используя внутренний вид контейнера для содержимого вашей ячейки. Я думаю, что это может быть лучший шанс.
И наконец...
Чтобы не быть побежденным, вы можете применить масштабирующее преобразование к контроллеру навигации для представления таблицы для создания поля, которое делает следующее в контроллере табличного представления:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
// Add a scaling transform to the whole embedded controller view.
self.navigationController!.view.transform=CGAffineTransformMakeScale(0.9, 0.9);
}
Это делает вид встроенного контроллера на 90% меньше, поэтому он имеет границу вокруг границы. Измените масштаб, чтобы изменить размер рамки.
Не идеально, но отлично работает без прокрутки прокрутки и имеет границу. Это также дает вам возможность свободно использовать закругленные углы и т.д., Поскольку весь контент масштабируется.