Ich habe eine einfache Jane UITableView auf einen UIViewController in iOS 7 gezogen.
Jetzt gibt es einen vertikalen Raumversatz, bevor die erste Zelle startet. Wie werde ich es los? Ich möchte, dass die erste Zeile viel näher an der Oberkante des tatsächlichen Starts von UITableView liegt. Ich habe nicht nach dem großen Versatz gefragt, oder?
Irgendwelche Ideen?
uitableview
ios7
user798719
quelle
quelle
Antworten:
Standardmäßig füllen Controller für Tabellenansichten den Inhalt unter der Navigationsleiste auf, sodass Sie den Inhalt darunter scrollen und ihn in einem unscharfen Zustand unter der Navigationsleiste / Symbolleiste anzeigen können.
Sieht so aus, als würden Sie es auf 44 (vielleicht 64) px positionieren, um es unter der Navigationsleiste herauszuholen, aber es gleicht dies bereits aus, sodass Sie eine große Lücke erhalten.
Gehen Sie in IB zum Storyboard / xib und deaktivieren Sie den Inhalt der Show unter Nav-Bar.
quelle
Adjust Scroll View insets
. Entfernen Sie das Häkchen.Die neue iOS 7- Implementierung von UIViewController verfügt über eine Reihe neuer Optionen, mit denen der Entwickler auswählen kann, ob das System automatisch Einfügungen für UIScrollView , UITableView und Ableitungen hinzufügt .
Um dieses Verhalten zu deaktivieren, deaktivieren Sie diese Kontrollkästchen für alle gewünschten UIViewController in InterfaceBuilder im ausgewählten Objektinspektor von UIViewController :
Für mehr Details:
quelle
Aus der iOS7-Übergangsanleitung:
quelle
Adjust Scroll View Insets
Kontrollkästchen für das Layout des Ansichtscontrollers.automaticallyAdjustsScrollViewInsets = NO
der Ansichtssteuerung einstellen.Ich hatte ein ähnliches Problem, nachdem ich einen viewController geschlossen hatte, wurde das contentOffset aus meiner tableView in (0, -64) geändert.
Meine Lösung war etwas seltsam. Ich habe alle anderen Antworten ausprobiert, aber keinen Erfolg gehabt. Das einzige, was mein Problem behoben hat, war das Ändern der tableView-Position im Steuerelementbaum der .xib
Es war das erste Steuerelement in der übergeordneten Ansicht wie folgt:
Ich habe die tableView direkt nach der ImageView verschoben und es hat funktioniert:
Es scheint, dass das Versetzen der Tabellenansicht in die erste Position das Problem verursacht hat und das Verschieben der Tabellenansicht in eine andere Position das Problem behoben hat.
PD Ich verwende weder autoLayout noch Storyboards
hoffe das kann jemandem helfen!
quelle
es löst mein ähnliches Problem:
quelle
if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1)
Versuchen Sie dies zu verwenden
tableView.separatorInset = UIEdgeInsetsZero;
Wenn Sie weniger als iOS7 unterstützen, müssen Sie natürlich sicherstellen, dass das Objekt auf diesen Selektor reagiert, bevor Sie es aufrufen.
quelle
Im Ernst, Veränderung
contentOffset
ist nicht die Lösung. Sie beheben nur ein Problem und beheben die Ursache nicht. Ich hatte das gleiche Problem und es stellte sich heraus, dass gruppierte tableViews oben eine Auffüllung haben. In meinem Fall setzen Sie den Typ auf normal hat den Trick getan.Hoffentlich spart es jemandem ein paar Minuten. Z.
quelle
Unter iOS 9 funktionierte keine der anderen Antworten auf dieser Seite für mich (dh Deaktivieren der Kontrollkästchen im Storyboard
automaticallyAdjustsScrollViewInsets
auf)NO
).Meine Problemumgehung, über die ich wirklich unzufrieden bin, war folgende:
Die gleichen Zeilen in
viewWillAppear
oderviewDidLoad
waren unwirksam.quelle
Adjust Scroll View insets
Kontrollkästchens funktioniert für iOS 9.Manchmal wird
64
oben in meiner TabellenansichtUIViewController
eine Höhenlücke angezeigt, wenn die in einen Navigationscontroller eingebettet ist.In der Vergangenheit habe ich einfach alles neu erstellt, in der Hoffnung, dass sich die Einschränkungen nach einer sauberen Tafel als richtig herausstellen.
TIL: Wenn Sie keine vertikale Einschränkung für das festlegen möchten
Top Layout Guide
, können Sie dieOption
Taste gedrückt halten, um auf das zuzugreifenContainer Margin
.Stellen Sie dann sicher, dass die
Top Space to Superview
Konstante auf eingestellt ist0
. Das hat zumindest bei mir funktioniert.quelle
Das funktioniert bei mir:
quelle
Wenn Sie vor UITableView eine leere UIView hinzufügen (oder eine Ansicht wie ScrollView und TextView scrollbar ist), können Sie Glück haben.
quelle
Ich hatte einen UITableViewController in eine Containeransicht eingebettet. Um die unerwünschten 64 Punkte des vertikalen Raums zu beseitigen, musste ich im Interface Builder die Option "Bildlaufansichten anpassen" deaktivieren und das contentInset von UITableView in viewWillAppear meines UITableViewControllers wie folgt festlegen.
Die Größe des vertikalen Raums scheint mit der Rahmenhöhe und dem y-Versatz der Navigationsleiste übereinzustimmen. Das Problem trat nur unter iOS 7 auf.
quelle
In Xamarin iOS trat dieses Problem auf einem UITableViewController im Hintergrund auf, kurz nachdem der modale Vordergrunddialog geschlossen wurde. Während der UITableViewController in den Vordergrund rückte, wurden Insets gesetzt (irgendwo von iOS):
Diese Klasse hat es gelöst
quelle
Von Zeit zu Zeit kehre ich zu dieser schrecklichen Situation zurück und bemerke, dass sie noch ziemlich unbekannt ist. Also, für die zukünftige Erinnerung ...
In letzter Zeit behebe ich mich mit dieser Problemumgehung.
Fragen Sie mich nicht warum, ich denke immer noch, dass es ein Fehler tief in UIKit ist.
quelle
Wenn Sie zum Storyboard wechseln, können Sie den Versatz ändern, indem Sie die Tabelle auswählen. Im Abschnitt "Tabellenansicht" im Inspektor "Attribute" ändern Sie einfach die Trennzeicheneinfügungen links in "0".
quelle
Ich denke, die wirkliche Lösung besteht darin, Ihre oberen und unteren Einschränkungen für die Tabellenansicht so einzurichten, dass sie mit topMargin und bottomMargin übereinstimmen. Nicht die obere Layoutanleitung und die untere Layoutanleitung. Auf diese Weise können Sie automatischAnjustsScrollViewInsets auf true setzen.
quelle
Swift 3-Lösung:
quelle
Wenn Sie Ihren TableViewController in einen NavigationController oder eine ContainerView eingebettet haben ,
You have to constraint to margins instead of top Layout guide in Storyboard
.Check constraint to margins when you are doing the constraints
Für mich hat kein anderer Weg funktioniert. Ich konnte keinen Kommentar abgeben, also wiederhole ich nur die Antwort von Robert Chens.quelle
Ich habe einige der Antworten ausprobiert. Das Ändern der Einstellungen im Storyboard verursachte Welligkeitsprobleme mit einem Overlay-Menü, das von links angezeigt wird.
Ich habe nur einen leeren UIViewController im Storyboard, sonst wird alles programmgesteuert generiert.
Ich habe das gleiche Problem mit einer UITableView in einer UIView in einem UIViewController. Die Abschnittsüberschriften beginnen nämlich zu weit unten, wenn der UIViewController in einen Navigationscontroller eingebettet ist. Ohne den Navigationscontroller funktioniert alles einwandfrei.
Um das Problem zu beheben, habe ich ein UILabel erstellt und mit Einschränkungen die untere UILabel-Einschränkung = die obere Einschränkung der UIView platziert (damit sie nicht auf dem Bildschirm angezeigt wird. Mit diesem zusätzlichen Steuerelement (dem neuen Label) verhält sich die TableView nun ordnungsgemäß.
quelle
Ich hatte das gleiche Problem in iOS 11 und xib, UITableviewController, und habe es wie folgt gelöst
quelle