7

Sto utilizzando un UIScrollView per il paging tre diversi UIViewControllers. Il cercapersone si inizializza per visualizzare la pagina 1 dall'inizio. Quindi l'utente può scorrere a sinistra o a destra dall'inizio. Quando presento un controller di visualizzazione modale dal controller di visualizzazione mid, lo UIScrollView scorre temporaneamente alla prima pagina durante l'animazione del controller di visualizzazione presentato. Quando chiudo il controller della vista modale, tutto torna alla normalità e lo UIScrollView visualizza il controller della vista centrale.UIScrollView scorre in una posizione diversa durante l'animazione della presentazione del controller di visualizzazione modale

Mi aspetto (e desidero) il UIScrollView per mantenere la sua posizione durante l'animazione.

Questo non è un bug tecnico che causa uno schianto o qualcosa del genere, è solo brutto.

Qualcuno l'ha mai avuto prima? hai qualche idea su come aggiustarlo?

+0

Quindi, per essere chiari, il problema è che la vostra vista di scorrimento scorre di nuovo alla vostra prima pagina quando si presenta una transizione modale dal 2 ° pagina? inoltre, stai usando il contenimento del controller di visualizzazione genitore-figlio? –

+0

puoi provare a disabilitare il paging su uiscrollview e controllare se si verifica ancora? –

+0

Hai provato a impostare la proprietà scrollEnabled su NO e poi su YES? – Woodstock

risposta

0

Ho avuto lo stesso problema e dopo molte indagini sembra essere un bug in UIKit relativo a scrollview e AutoLayout. Ecco il 'fix' ...

In viewDidDisappear :, salvare il contentOffset ScrollView corrente a una proprietà, e resettare a zero:

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

    self.previousContentOffset = self.scrollView.contentOffset; 

    self.scrollView.contentOffset = CGPointZero; 
} 

Poi, in viewWillAppear :, azzerare il il contenuto è tornato a quello che era in precedenza. Ho dovuto inviare questo nella coda principale per farlo funzionare correttamente:

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

in' viewDidDisappear' e anche in 'viewWillDisappear',' scrollview.contentOffset' è '{ 0, 0} '. E 'self.scrollView.contentOffset = offset manuale;' non è eseguito, funziona solo se aggiungi ritardo. – jose920405