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".
Ich hatte das gleiche Problem und bin mir ziemlich sicher, dass ich irgendwann eine UIView hatte. Durch einfaches Kopieren der gesamten Tabellenansicht, Löschen und erneutes Einfügen wurde das Problem für mich behoben.
quelle
Wählen Sie die Tabellenansicht in Ihrem Storyboard aus und stellen Sie sicher, dass der Stil auf "Einfach" anstatt auf "Gruppiert" eingestellt ist. Sie finden diese Einstellung auf der Registerkarte Attribute Inspector.
quelle
In meinem Fall hatte ich ein UILabel unter der UITableView in der Ansichtshierarchie.
Ich bewegte es "vorwärts" und die Leerstelle erschien. Ich weiß nicht warum, aber es funktioniert so. Wenn sich unter der tableView etwas befindet, wird die Leerstelle ausgeblendet.
Sie können auch versuchen, "Scroll View Insets" in Ihrem View Controller Inspector im Storyboard zu aktivieren / deaktivieren.
quelle
Keiner der oben genannten hat mir geholfen. aber das hat geholfen :
Anstelle von '-64' können Sie abhängig von der Höhe Ihrer Navigationsleiste eine beliebige andere Zahl eingeben.
quelle
Es kann vorab hinzugefügt werden
UIRefreshControl
. Ich habe dieses Problem mit Code wie folgt:Wie Sie sehen, setze ich
self.refreshController
sofort danachinit
Wenn Sie jedoch
refreshControl
nach dem Setup festlegen , stört Sie der Top-Space nicht.quelle
Wenn Sie dies unter iOS 11 tun, funktioniert "AdjustsScrollViewInsets" automatisch nicht, da es veraltet ist. Der folgende Code hat für mich gemäß der Antwort in diesem Beitrag funktioniert: https://stackoverflow.com/a/44391269/5476481
Hoffe das hilft.
quelle
Setzen
contentInsets
Sie im Storyboard die Option " Nie"tableview
auf " Nie"quelle
Ich kann nicht sicher sagen, aber es sieht so aus, als ob zwischen dem Beginn der Prototypzellen und dem oberen Rand der UITableView ein zusätzliches UIView steckt. Mein Bild sieht genauso aus wie deins, wenn Sie den Text / die Zeilen entfernen, die ich hinzugefügt habe.
quelle
Ich bin mir immer noch nicht sicher, was diesen zusätzlichen Speicherplatz oben verursacht hat, aber ich habe festgestellt, dass das Löschen der UITableView durch den Speicherplatz und das Ersetzen durch einen neuen Speicherplatz den Speicherplatz weggenommen hat.
Ich muss versehentlich eine UIView hineingezogen haben, aber ich konnte sie nicht auswählen, sodass ich sie nicht löschen konnte.
quelle
Swift 5
Versuchen Sie es mit tableHeaderView und tableFooterView
quelle
Überprüfen Sie Ihren Tabellenansichtsrahmen im Storyboard oder in xib. Meins hat standardmäßig einen Positionswert, daher der Fehler
quelle
In meiner Bewerbung habe ich auch ein solches Problem festgestellt. Ich habe den oberen Rand von tableView auf Null gesetzt. Auch versucht eingestellt
false
fürautomaticallyAdjustsScrollViewInsets
. Hat aber nicht funktioniert.Endlich habe ich eine funktionierende Lösung. Ich weiß nicht, ob das der richtige Weg ist. Aber die Implementierung der
heightForHeaderInSection
Delegate-Methode hat bei mir funktioniert. Sie müssen einen Wert ungleich Null zurückgeben, um dies zu erreichen (Rückgabe Null zeigt den gleichen Platz wie zuvor an).quelle
Was 2017 für mich funktioniert, ist einfach diese eine Zeile
navigationController? .navigationBar.isTranslucent = false
Ich habe keine Ahnung, warum sich das überhaupt darauf auswirken würde. Vielleicht könnte jemand erklären. Aber ich bin mir ziemlich sicher, dass dies die Antwort ist, nach der die meisten Menschen suchen würden.
quelle
In iOS 11 und höher hat Apple die Eigenschaft geändert, um das Einfügen von Inhalten anzupassen. Verwendung
contentInsetAdjustmentBehavior
und stellt.never
oben zusätzlichen Raum zu entfernenUICollectionView
,UIScrollView
,UITableView
.Ich hoffe, dies wird dir helfen.
quelle
Für mich trat das Problem auf, als ich eine Prototypzelle aus dem Menü in die Tabellenansicht zog. Also habe ich das gelöscht und die Prototypzelle in den Eigenschaften des Inspektors für die Tabellenansicht auf 1 gesetzt
quelle
Ich mache das programmgesteuert und habe einfach meine addSubview (tableView) nach unten verschoben, nachdem ich alle meine anderen Unteransichten hinzugefügt habe, und es hat mein Problem gelöst!
Ich bin mir nicht sicher, warum dies nur auf dem Gerät und nicht auf meinem Simulator angezeigt wird, aber so oder so gibt es zumindest eine einfache Lösung!
quelle
Solange UITableView nicht die erste Unteransicht des View Controllers ist, wird der leere Bereich nicht angezeigt.
Lösung: Fügen Sie ein ausgeblendetes / klares Ansichtsobjekt (Ansichten, Beschriftungen, Schaltflächen usw.) als erste Unteransicht des Ansichtscontrollers hinzu (auf derselben Ebene wie die UITableView, jedoch davor).
quelle
UIView kann oben und unten in die Tabelle eingefügt werden (Drag & Drop). Stellen Sie ihre Eigenschaften als transparent und eine Höhe von 1 px ein. Dies dient dazu, die zusätzliche Polsterung vor den Zellen zu entfernen.
quelle
Ich hatte auch dieses Problem, dass die tableView nicht die letzte Ansicht in der Hierarchie war. In meinem Fall hatte ich eine Ansicht oben (obwohl sie sich nicht überlappten), also zog ich sie über die tableView in der Hierarchie und das machte es.
quelle
Ich habe gerade eine Lösung dafür gefunden.
Wählen Sie einfach Tabellenansicht und Clic-Editor -> Anordnen -> Nach vorne senden
Es hat bei mir funktioniert und ich hoffe, es hilft euch allen.
quelle
In meinem Fall habe ich ContainerViewController verwendet und UITableViewController eingefügt. Nach dem Entfernen von ContainerViewController. Probleme gehen weg.
quelle
Xcode 8 Fehler…
Versuchen Sie dies zuerst, wenn Ihr Storyboard UITableView-Stil auf "Einfach" eingestellt ist.
Setzen Sie den Stil der Tabelle auf Gruppiert und dann zurück auf Einfach. Dadurch wurde der Platz in meiner App am Kopf meiner UITableView entfernt.
quelle
In meinem Fall habe ich eine Containeransicht verwendet (Hauptansicht -> Contaner-Ansicht -> UITableView)
Der zusätzliche Platz oben entspricht meiner Meinung nach dem Platz in der Geräte-Benachrichtigungsleiste (wo die Uhrzeit angezeigt wird, der Akku). Das tue ich wirklich, das ist keine Annahme.
Was ich getan habe, war vom UI Builder:
quelle
Sie können diesen Code in viewDidLoad oder viewDidAppear verwenden, wo Ihre Tabelle erstellt wird:
quelle
I just found a solution for this. In my case, i was using TabBarViewController, A just uncheck the option 'Adjust Scroll View Insets'. Issues goes away.
https://i.stack.imgur.com/vRNfV.pngquelle
Legen Sie die erweiterten Kanten von ViewController im Storyboard so fest, dass die
underTopBar
Eigenschaft deaktiviert ist.quelle
Hatte das gleiche Problem. Ich habe es gelöst, indem ich viewDidLoad Folgendes hinzugefügt habe.
quelle
Setzen Sie die Inhaltseinfügungen auf Null:
quelle
prüfen Auf
quelle