2014-05-23 14 views
9

su iOS 7. Ho un controller di navigazione e spingo un nuovo VC in cima allo stack._adjustContentOffsetIfNecessario - UIScrollView scorre automaticamente verso l'alto

Quel nuovo VC ha un UIScrollView che riempie la vista radice del VC e scorre verticalmente. Se faccio scorrere verso il basso un po 'e poi provo a usare il gesto' swipe to go back '/' swipe to pop ', la vista scroll verticale dapprima scorre verso l'alto, e poi interactivePopGesture viene riconosciuto e posso trascinare il VC più in alto impilare a sinistra ea destra.

Perché succede? Desidero impedire alla mia vista di scorrimento di scorrere automaticamente verso l'alto prima che venga riconosciuto il gesto "scorri per tornare indietro". Come faccio a fare questo?

UPDATE # 1:

non riesco a riprodurre questo errore quando creo un progetto Xcode fresco, quindi è sicuramente l'errore da parte mia nel progetto originale. Aggiornerà quando trovo il motivo.

UPDATE # 2:

Quando interactivePopGesture viene riconosciuta, setContentOffset metodo viene chiamato sul mio punto di vista di scorrimento verticale. Durante il debug, vedo che setContentOffset è stato richiamato da UIScrollViewInternal _adjustContentOffsetIfNecessary.

UPDATE # 3:

stesso problema si verifica in uno scenario seguente: Ho UITextFields all'interno di un UIScrollView verticale. Quando viene premuto un determinato UITextField, viene visualizzata una tastiera. Quando voglio chiudere la tastiera in modo interattivo (trascinando la vista di scorrimento sulla tastiera), dopo aver rilasciato il trascinamento, si verifica un problema tecnico. L'offset del contenuto di UIScrollView è momentaneamente stato impostato su zero, quindi torna all'offset del contenuto originale e procede con l'animazione. Questa impostazione indesiderata di contentOffset viene anche invocata da UIScrollViewInternal _adjustContentOffsetIfNecessary.

Sono andato avanti e ho sostituito UIScrollView in entrambi gli scenari con la mia sottoclasse di UIScrollView. In questa sottoclasse ho sovrascritto un metodo privato -(void) _adjustContentOffsetIfNecessary come metodo vuoto vuoto. Entrambi i miei problemi sono stati eliminati e non sono riuscito a trovare alcuna conseguenza negativa. Questa non è una soluzione e non userò questo approccio, poiché non ho idea di cosa esattamente abbia fatto.

+0

Potrebbe essere qualcosa di simile a set di UIViewControllerAutomaticallyAdjustsScrollViewInsets api su iOS7 –

+0

Ho impostato automaticamenteAdjustsScrollViewInsets = NO; su ogni controller vista ho pensato potrebbe essere rilevante per la situazione. Non aiuta – ancajic

+0

Ho incontrato anche questo problema. Ho impostato manualmente contentOffset come (0, -64), ma _adjustContentOffsetIfNecessario ha cambiato di nuovo a -108. Confuso. Qualsiasi aggiornamento? – Wingzero

risposta

0

Ho trovato uno interesting discussion su questo su Twitter. Anche se non è il mio caso, potrebbe aiutare qualcuno:

Is there some trick to bring UINavigationController to not mess with a UIScrollView (_adjustContentOffsetIfNecessary)? 

@steipete Searching for the same thing and came across your tweet. I set contentOffset but it resets back to -64 (ios7). Did you find a fix? 
@errthling Add a dummy view as first subview. It won’t look further. 
@steipete Wow – that worked. I've been struggling with it for days. Thanks for that and everything else you put out there! :) 
@errthling happy to help! 

@steipete did you find an answer to this, 2 years ago? =D my scrollview's contentOffset is reset when I push a new viewcontroller.. 
@manuelmaly Yeah. Changed the view hierarchy so the scroll view is not the main view and not the first subview, and UIKit stops messing. 
@steipete oO i hacked it in the meantime by blocking setContentOffset before pushViewController is called. your solution seems cleaner tho 

twitter discussion

0

Usa UIViewController con un UITableView invece di UITableViewController. Risolve il mio problema :)

Problemi correlati