Wenn Sie dies replizieren möchten, führen Sie einfach die folgenden Schritte aus:
- Erstellen Sie ein neues iOS-Projekt
- Öffnen Sie das Haupt-Storyboard und löschen Sie die Standardeinstellung / Initiale
UIViewController
- Ziehen Sie eine neue
UITableViewController
aus der Objektbibliothek
- Legen Sie es als Erstansichts-Controller fest
- Geben Sie der Tabelle einige Testdaten
Wenn Sie beim Ausführen der App die oben genannten Schritte ausführen, werden Sie feststellen, dass nichts, einschließlich der Optimierung der Kontrollkästchen von Xcode auf "Kanten unter {oberen, unteren, undurchsichtigen} Balken erweitern", verhindert, dass die erste Zeile unter der Statusleiste angezeigt wird. Sie können dies auch nicht programmgesteuert angehen.
ZB Im obigen Szenario hat Folgendes keine Auswirkung:
// These do not work
self.edgesForExtendedLayout=UIRectEdgeNone;
self.extendedLayoutIncludesOpaqueBars=NO;
self.automaticallyAdjustsScrollViewInsets=NO;
Dieses Problem kann sehr frustrierend sein, und ich glaube, es ist ein Fehler von Apple, insbesondere weil es in der eigenen vorverdrahteten UITableViewController
Objektbibliothek angezeigt wird.
Ich bin nicht einverstanden mit allen, die versuchen, dies durch die Verwendung einer beliebigen Form von "Magic Numbers" zu lösen, z. B. "Verwenden Sie ein Delta von 20 Pixel". Diese Art der eng gekoppelten Programmierung ist definitiv nicht das, was Apple von uns hier verlangt.
Ich habe zwei Lösungen für dieses Problem gefunden:
Die Erhaltung der UITableViewController
‚s Szene :
Wenn Sie das behalten mögen UITableViewController
im Storyboard, ohne es in einer anderen Ansicht manuell zu platzieren, können Sie das einbetten UITableViewController
in einem UINavigationController
(Editor> Embed In> Navigation Controller) und deaktivieren‚Shows Navigation Bar‘im Inspektoren . Dies löst das Problem, ohne dass zusätzliche Anpassungen erforderlich sind, und bewahrt auch Ihre UITableViewController
Szene im Storyboard.
Verwenden von AutoLayout und Einbetten von UITableView
in eine andere Ansicht (ich glaube, Apple möchte, dass wir dies tun) :
Erstellen Sie ein leeres UIViewController
und ziehen Sie UITableView
es hinein. Ziehen Sie dann bei gedrückter Strg-Taste von Ihrer UITableView
in die Statusleiste. Wenn sich die Maus am unteren Rand der Statusleiste befindet, wird eine Autolayout-Blase mit der Aufschrift "Top Layout Guide" angezeigt. Lassen Sie die Maus los und wählen Sie "Vertikaler Abstand". Dadurch wird das Layoutsystem angewiesen, es direkt unter der Statusleiste zu platzieren.
Ich habe beide Methoden an einer leeren Anwendung getestet und beide funktionieren. Möglicherweise müssen Sie einige zusätzliche Anpassungen vornehmen, damit sie für Ihr Projekt funktionieren.