Ich habe eine UITableView
welche eine UISearchBar
Unteransicht hat. Dies ist alles in der Ansicht von UIViewController
zusammen mit einigen anderen Unteransichten (Beschriftungen, Textfelder usw.).
Die Suchleiste und der Inhalts-Offset der Tabelle verhalten sich ziemlich merkwürdig, aber es scheint von der Reihenfolge abhängig zu sein, in der diese Ansichten der Hauptansicht in der XIB hinzugefügt werden. Ich habe ein Beispielprojekt mit nur meiner Tabelle / Suche und einem Label erstellt, um zu testen, und das Ergebnis ist das gleiche. Wenn die Tabelle nach der Bezeichnung hinzugefügt wird, funktioniert alles einwandfrei:
Allerdings , wenn ich einfach die Reihenfolge ändere, in der meine zwei Unteransichten auf der Hauptansicht sitzen (alias Tabelle vor der Beschriftung), beginnen seltsame Dinge.
Ich ändere nichts anderes, also warum scheint Xcode sich darum zu kümmern, in welcher Reihenfolge diese Subviews zur Hauptansicht hinzugefügt werden? Wenn ich die "schlechte" Tabellenkonfiguration nach oben scrolle, verschwindet die Suchleiste sofort an der oberen Kante, aber der Inhalt der Tabelle wird weiter nach oben scrollen, bis sie den oberen Rand des Rahmens erreicht, der in der xib gesetzt wurde. Scrollen Sie zurück nach unten und die Suchleiste erscheint nicht wieder bis zum merkwürdig abgesenkten Standort. Dies ist in Xcode 5.1.1, nicht in der neuen Beta. Das Ergebnis ist dasselbe mit oder ohne Autolayout aktiviert.
Irgendeine Idee, warum das passiert? Ist das ein Fehler, oder fehlt mir etwas? (Ich habe keinen Code gepostet, weil ich nur die Anzahl der Abschnitte, Zeilen und den Text auf der Zelle festlege. Nicht mit Inhaltseinfügungen, Offset, irgendetwas. Ich lade die Ansicht vom App-Delegaten als die Wurzel eines Nav-Controllers)
Dies geschieht, weil die Eigenschaft UIViewController
automaticallyAdjustsScrollViewInsets
Mit iOS 7 haben UIViewControllers eine Eigenschaft namens automaticallyAdjustScrollViewInsets, und es wird standardmäßig auf YES gesetzt. Wenn du haben Sie eine Bildlaufansicht, die entweder die Stammansicht Ihrer Ansicht ist Controller (z. B. mit einem UITableViewController) oder die Unteransicht at Index 0, dann wird diese Eigenschaft sowohl das contentInset als auch das scrollIndicatorInsets. Dadurch kann Ihre Bildlaufansicht gestartet werden Inhalt und Scroll-Indikatoren unter der Navigationsleiste (wenn Ihre Ansicht Controller ist in einem Navigationscontroller).
Von Big Nerd Ranch
Wenn Sie Storyboards verwenden, können Sie dies ändern, indem Sie den View-Controller auswählen und im Komponenteninspektor Adjust scroll view insets
deaktivieren.
Hier ist die Beschreibung von Apple-Dokumentation :
Der Standardwert ist YES, mit dessen Hilfe der View-Controller seine Einstellungen vornehmen kann Bildlaufeinschübe als Reaktion auf die von der Statusleiste, Navigationsleiste und Symbolleiste oder Registerleiste. Stellen Sie auf NEIN, wenn Sie Scroll-View-Inset-Anpassungen selbst verwalten möchten, z. B. wann In der Ansichtshierarchie gibt es mehr als eine Bildlaufansicht.
Ich habe dasselbe Problem vor der Position von Tabellenansicht und Suchleiste. Ich habe folgendes versucht und es funktioniert für mich.
Wenn Sie keinen Code dafür schreiben und es sich nur um ein Problem von xib oder Storyboard handelt, versuchen Sie die Einstellung für die automatische Größenanpassung und die Ursprungseinstellung aller Ausgänge, um ihre Position zu fixieren und den Unterschied zu sehen. es kann Arbeit für dich sein.
Tags und Links objective-c uitableview ios uisearchbar