UIScrollView прокручивает в другую позицию, анимируя представление контроллера модального представления
Я использую UIScrollView
для подкачки трех разных UIViewControllers
, Пейджер инициализируется для отображения страницы 1 с начала. Таким образом, пользователь может провести влево или вправо с самого начала. Когда я представляю модальный контроллер вида из контроллера среднего вида, UIScrollView
временно прокручивается на первую страницу во время анимации представленного контроллера представления. Когда я отклоняю модальный контроллер представления, все возвращается к нормальному состоянию и UIScrollView
отображает контроллер центрального вида.
Я ожидал (и хочу) UIScrollView
сохранить свою позицию во время анимации.
Это не техническая ошибка, которая вызывает сбой или что-то, это просто уродливо.
Кто-нибудь когда-либо имел это раньше? Есть идеи как это исправить?
1 ответ
У меня была такая же проблема, и после долгих исследований это, похоже, ошибка в UIKit, связанная с scrollviews и AutoLayout. Вот "исправить"...
В viewDidDisappear: сохраните текущее свойство contentOffset прокрутки в свойстве и сбросьте его на ноль:
- (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
self.previousContentOffset = self.scrollView.contentOffset;
self.scrollView.contentOffset = CGPointZero;
}
Затем в viewWillAppear: сбросьте смещение содержимого обратно на то, что было ранее. Я должен был отправить это в основную очередь, чтобы заставить его работать правильно:
- (void)viewWillAppear:(BOOL)animated
{
if (!CGPointEqualToPoint(self.previousContentOffset, CGPointZero))
{
dispatch_async(dispatch_get_main_queue(), ^{
self.scrollView.contentOffset = self.previousContentOffset;
});
}
}