Ho un controller contenitore che visualizza una barra di dati proprio sotto la guida di layout lop.È possibile impostare gli inserti di visualizzazione a scorrimento per i controller contenitore?
Voglio che il controller figlio di questo controller contenitore sia in grado di scorrere dietro questa barra così come qualsiasi barra di navigazione e barra di stato. Tuttavia sembra che quando UIKit regola automaticamente gli insiemi di visualizzazione a scorrimento di un controller tiene conto solo della lunghezza della guida di layout superiore.
C'è un modo per dire che gli insiemi di visualizzazione di scorrimento dovrebbero essere la guida di layout superiore + l'altezza della mia barra? So che le persone suggeriranno di impostare automaticallyAdjustsScrollViewInsets = NO
ma l'ho già provato. Il problema è che non riesco a replicare esattamente quando UIKit imposta gli insiemi di contenuto e così ottengo tutti i tipi di casi limite che infrangono gli inset. L'esempio più importante è UITableViewController dove, poiché imposto manualmente gli insiemi di contenuti, il controllo di aggiornamento a volte non è nella posizione corretta e quando termino l'aggiornamento degli insiemi della vista di scorrimento viene impostato su {0, 0} in modo che il contenuto sia nascosto dietro il mio bar e la barra di navigazione.
UPDATE: Tutta la magia sembra essere all'interno dei metodi _setNavigationControllerContentInsetAdjustment
su UIViewController e _computeAndApplyScrollContentInsetDeltaForViewController
su UINavigationController.
Sembra che solo il controller di navigazione tenti di regolare gli inserti della vista a scorrimento e calcola gli inserti in base alle guide di layout in alto e in basso. Passa questi insiemi sul controller della vista che quindi aggiunge/sottrae gli insiemi dalla vista di scorrimento e prende in considerazione quali insiemi di contenuto di navigazione sono stati impostati in precedenza. Ciò garantisce che se qualcun altro ha modificato gli insiemi di contenuti da ora a oggi e quando il controller di navigazione ha modificato per ultimi gli inset non ignorerà le modifiche intermedie.