Per chiunque sia interessato a replicare questo, basta seguire questi passaggi:
- Crea un nuovo progetto iOS
- Apri lo storyboard principale ed elimina l'impostazione predefinita / iniziale
UIViewController
- Trascinane uno nuovo
UITableViewControllerdalla Libreria oggetti
- Impostalo come controller della vista iniziale
- Alimenta la tabella con alcuni dati di test
Se segui i passaggi precedenti, quando esegui l'app, vedrai che nulla, inclusa la modifica delle caselle di controllo di Xcode su "Estendi bordi sotto {Barre superiori, inferiori, opache}" funziona per impedire che la prima riga appaia sotto la barra di stato, né puoi affrontarlo a livello di codice.
Ad esempio, nello scenario sopra riportato, i seguenti non avranno alcun effetto:
// These do not work
self.edgesForExtendedLayout=UIRectEdgeNone;
self.extendedLayoutIncludesOpaqueBars=NO;
self.automaticallyAdjustsScrollViewInsets=NO;
Questo problema può essere molto frustrante, e credo che sia un bug da parte di Apple, soprattutto perché si presenta nel proprio pre-cablato UITableViewControllerdalla libreria di oggetti.
Non sono d'accordo con tutti coloro che stanno cercando di risolverlo utilizzando qualsiasi forma di "numeri magici", ad esempio "usa un delta di 20px". Questo tipo di programmazione strettamente accoppiata non è sicuramente ciò che Apple vuole che facciamo qui.
Ho scoperto due soluzioni a questo problema:
Preservare la UITableViewControllerscena :
se desideri conservare il file UITableViewControllernello storyboard, senza posizionarlo manualmente in un'altra vista, puoi incorporarlo UITableViewControllerin UINavigationController(Editor> Incorpora in> Controller di navigazione) e deselezionare "Mostra barra di navigazione" nella finestra di ispezione . Questo risolve il problema senza ulteriori modifiche e preserva anche la tua UITableViewControllerscena nello storyboard.
Utilizzando AutoLayout e incorporando il UITableViewin un'altra vista (credo che sia così che Apple vuole che lo facciamo) :
crea uno spazio vuoto UIViewControllere trascina il tuo UITableViewal suo interno. Quindi, trascinare tenendo premuto il tasto Ctrl dalla UITableViewbarra verso lo stato. Man mano che il mouse arriva in fondo alla barra di stato, vedrai un fumetto di Autolayout che dice "Guida al layout superiore". Rilascia il mouse e scegli "Spaziatura verticale". Ciò dirà al sistema di layout di posizionarlo proprio sotto la barra di stato.
Ho testato entrambi i modi su un'applicazione vuota ed entrambi funzionano. Potrebbe essere necessario apportare ulteriori modifiche per farli funzionare per il tuo progetto.