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.
Potrebbe essere qualcosa di simile a set di UIViewControllerAutomaticallyAdjustsScrollViewInsets api su iOS7 –
Ho impostato automaticamenteAdjustsScrollViewInsets = NO; su ogni controller vista ho pensato potrebbe essere rilevante per la situazione. Non aiuta – ancajic
Ho incontrato anche questo problema. Ho impostato manualmente contentOffset come (0, -64), ma _adjustContentOffsetIfNecessario ha cambiato di nuovo a -108. Confuso. Qualsiasi aggiornamento? – Wingzero