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
UITableViewController
dalla 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 UITableViewController
dalla 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 UITableViewController
scena :
se desideri conservare il file UITableViewController
nello storyboard, senza posizionarlo manualmente in un'altra vista, puoi incorporarlo UITableViewController
in 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 UITableViewController
scena nello storyboard.
Utilizzando AutoLayout e incorporando il UITableView
in un'altra vista (credo che sia così che Apple vuole che lo facciamo) :
crea uno spazio vuoto UIViewController
e trascina il tuo UITableView
al suo interno. Quindi, trascinare tenendo premuto il tasto Ctrl dalla UITableView
barra 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.