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;
        });
    }
}
Другие вопросы по тегам