UISearchBar beim seltsamen Offset-Problem UITableView

8

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:

Setup:

Korrektes und erwartetes Ergebnis:

Allerdings , wenn ich einfach die Reihenfolge ändere, in der meine zwei Unteransichten auf der Hauptansicht sitzen (alias Tabelle vor der Beschriftung), beginnen seltsame Dinge.

Scheinbar schlechtes Setup:

Abweichender Offset der Suchleiste:

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)

    
Stonz2 20.06.2014, 20:52
quelle

4 Antworten

13

Dies geschieht, weil die Eigenschaft UIViewController automaticallyAdjustsScrollViewInsets

heißt
  

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.

    
Mustafa Ahmed 23.06.2014, 12:58
quelle
1

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.

    
Max 21.06.2014 06:45
quelle
0

Der UITableView-Header kann nur eine UIView enthalten. Wenn Sie also UISearchBar plus UILabel benötigen, müssen Sie sie in UIView einfügen und diese Ansicht als UITableView-Header hinzufügen.

    
avdyushin 23.06.2014 12:52
quelle
0

Update: automaticallyAdjustsScrollViewInsets wurde in iOS 11 veraltet und ein neues Feld contentInsetAdjustmentBehavior wurde eingeführt.

%Vor%     
Gihan 26.02.2018 19:44
quelle