Pour toute personne intéressée à répliquer cela, suivez simplement ces étapes:
- Créer un nouveau projet iOS
- Ouvrez le storyboard principal et supprimez la valeur par défaut / initiale
UIViewController
- Faites glisser un nouveau
UITableViewController
depuis la bibliothèque d'objets
- Définissez-le comme contrôleur de vue initial
- Nourrir le tableau des données de test
Si vous suivez les étapes ci-dessus, lorsque vous exécutez l'application, vous verrez que rien, y compris le fait de modifier les cases à cocher de Xcode pour "étendre les bords sous les barres {haut, bas, opaques}", empêche la première ligne d'apparaître sous la barre d'état, vous ne pouvez pas non plus résoudre ce problème par programme.
Par exemple, dans le scénario ci-dessus, les éléments suivants n'auront aucun effet:
// These do not work
self.edgesForExtendedLayout=UIRectEdgeNone;
self.extendedLayoutIncludesOpaqueBars=NO;
self.automaticallyAdjustsScrollViewInsets=NO;
Ce problème peut être très frustrant, et je pense que c'est un bug de la part d'Apple, surtout parce qu'il apparaît dans leur propre pré-câblé à UITableViewController
partir de la bibliothèque d'objets.
Je suis en désaccord avec tous ceux qui essaient de résoudre ce problème en utilisant n'importe quelle forme de «nombres magiques», par exemple «utiliser un delta de 20 pixels». Ce type de programmation étroitement couplée n'est certainement pas ce qu'Apple veut que nous fassions ici.
J'ai découvert deux solutions à ce problème:
Préserver la UITableViewController
scène de :
Si vous souhaitez conserver le UITableViewController
dans le storyboard, sans le placer manuellement dans une autre vue, vous pouvez incorporer le UITableViewController
dans un UINavigationController
(Editeur> Intégrer dans> Contrôleur de navigation) et décochez "Affiche la barre de navigation" dans l'inspecteur . Cela résout le problème sans aucun ajustement supplémentaire nécessaire, et il préserve également votre UITableViewController
scène dans le storyboard.
Utiliser AutoLayout et incorporer le UITableView
dans une autre vue (je pense que c'est ainsi qu'Apple veut que nous le fassions) :
Créez un vide UIViewController
et faites-le glisser UITableView
dedans. Ensuite, faites glisser la touche Ctrl de votre UITableView
vers la barre d'état. Lorsque la souris arrive en bas de la barre d'état, vous verrez une bulle de mise en page automatique indiquant "Top Layout Guide". Relâchez la souris et choisissez "Espacement vertical". Cela indiquera au système de disposition de le placer juste en dessous de la barre d'état.
J'ai testé les deux façons sur une application vide et ils fonctionnent tous les deux. Vous devrez peut-être effectuer quelques ajustements supplémentaires pour les faire fonctionner pour votre projet.