7

Używam UIScrollView do stronicowania trzech różnych UIViewControllers. Pager inicjalizuje wyświetlanie strony 1 od początku. Tak więc użytkownik może przesunąć w lewo lub w prawo od samego początku. Kiedy przedstawiam kontroler widoku modalnego z kontrolera widoku średniego, UIScrollView tymczasowo przewija do pierwszej strony podczas animacji przedstawionego kontrolera widoku. Po zwolnieniu kontrolera widoku modalnego wszystko wraca do normy, a UIScrollView wyświetla kontroler widoku centrum.UIScrollView przewija do innej pozycji podczas animowania prezentacji kontrolera widoku modalnego.

Spodziewałbym się (i chcę), aby pozycja UIScrollView była zachowana podczas animacji.

To nie jest błąd techniczny, który powoduje awarię lub coś, jest po prostu brzydki.

Ktoś kiedykolwiek miał to wcześniej? Każdy pomysł, jak to naprawić?

+0

więc być jasne, problemem jest to, że widok przewijania jest przewijanie z powrotem do pierwszej strony przy prezentowaniu modalne przejście od 2 strona? również, czy używasz ochrony kontrolera widoku nadrzędnego podrzędność? –

+0

Czy możesz spróbować wyłączyć stronicowanie w widoku uiscrollview i sprawdzić, czy nadal występuje? –

+0

Czy próbowałeś ustawić właściwość scrollEnabled na NIE, a następnie z powrotem na TAK? – Woodstock

Odpowiedz

0

Miałem ten sam problem i po wielu badaniach wydaje się, że jest to błąd w UIKit związany z przewijaniem i AutoLayout. Poniżej znajduje się 'naprawić' ...

W viewDidDisappear :, zapisać bieżący Scrollview contentOffset do nieruchomości, i zresetować go do zera:

- (void)viewDidDisappear:(BOOL)animated 
{ 
    [super viewDidDisappear:animated]; 

    self.previousContentOffset = self.scrollView.contentOffset; 

    self.scrollView.contentOffset = CGPointZero; 
} 

Następnie w viewWillAppear :, zresetować Przesunięcie treści z powrotem do tego, co było wcześniej. Miałem wysyłką to na głównej kolejce, aby dostać to, aby działać poprawnie:

- (void)viewWillAppear:(BOOL)animated 
{ 
    if (!CGPointEqualToPoint(self.previousContentOffset, CGPointZero)) 
    { 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      self.scrollView.contentOffset = self.previousContentOffset; 
     }); 
    } 
} 
+0

w' viewDidDisappear' oraz 'viewWillDisappear' też,' scrollview.contentOffset' to '{ 0, 0} '. I 'self.scrollView.contentOffset = ręczne przesunięcie;' nie jest wykonywane, działa tylko wtedy, gdy dodaje opóźnienie. – jose920405

Powiązane problemy