UITableView
Zeigen sich die Zellen der Show auf dem leeren Raum, wenn Sie nach unten scrollen?
Wenn ja, dann könnte das Problem der Einschub sein, der dem hinzugefügt wird UITableView
aufgrund des Navigationscontrollers, den Sie in Ihrer Ansicht haben . Der Einschub wird der Tabellenansicht hinzugefügt, damit der Inhalt unter der Navigationsleiste platziert wird, wenn kein Bildlauf stattgefunden hat. Wenn die Tabelle gescrollt wird, wird der Inhalt gescrollt und unter einer transparenten Navigationsleiste angezeigt. Dieses Verhalten ist natürlich nur erwünscht, wenn die Tabellenansicht direkt unter der Navigationsleiste startet, was hier nicht der Fall ist.
Eine andere zu beachtende Sache ist, dass iOS den Inhaltseinsatz nur für die erste Ansicht in der Ansichtshierarchie anpasst, wenn es sich um UIScrollView
einen Nachkommen handelt (z . B. UITableView
und UICollectionView
). Wenn Ihre Ansichtshierarchie mehrere Bildlaufansichten enthält, automaticallyAdjustsScrollViewInsets
werden nur Anpassungen an der ersten vorgenommen.
So ändern Sie dieses Verhalten:
a) Interface Builder
- Wählen Sie den View Controller
- Öffnen Sie den Attributinspektor
Im Attributinspektor von IB (wenn ein Ansichtscontroller ausgewählt ist) gibt es eine Eigenschaft namens "Bildlaufansichten anpassen", die standardmäßig aktiviert ist. Deaktivieren Sie diese Option:
(Mit freundlicher Genehmigung von Dheeraj D )
Ich bin nicht sicher, welche Xcode-Version diese Option eingeführt hat (habe sie in den Versionshinweisen nicht gefunden), aber sie ist zumindest in Version 5.1.1 verfügbar.
Bearbeiten: Um Verwirrung zu vermeiden, war dies die dritte Option, die in den Kommentaren erwähnt wurde
b) Programmatisch
Fügen Sie dies hinzu, dh viewDidLoad
(Credits zu Slavco Petkovskis Antwort und Cris Rs Kommentar)
// Objective-C
self.automaticallyAdjustsScrollViewInsets = NO;
// Swift
self.automaticallyAdjustsScrollViewInsets = false
c) Dies könnte für alte Schüler relevant sein
Sie können dies entweder durch Hinzufügen beheben
tableView.contentInset = UIEdgeInsetsZero
//Swift 3 Change
tableView.contentInset = UIEdgeInsets.zero
Oder wenn Sie IB verwenden und die Navigationsleiste nicht transparent ist (kann dem Screenshot nicht entnehmen)
- Wählen Sie den View Controller
- Öffnen Sie den Attributinspektor
- Deaktivieren Sie in den View Controller-Optionen "Kanten erweitern" die Option "Unter den oberen Balken".