uinavigationcontroller - customize - uinavigationitem




IOS7: UIScrollView-Offset in UINavigationController (6)

@ Justafingers Antwort funktionierte auch für mich wie ein Zauber.

Ich wollte nur hinzufügen, dass diese Einstellung auch einfach über den Interface Builder angepasst werden kann.

  1. Wählen Sie Ihren Ansichtscontroller
  2. Klicken Sie auf das Register "Attribute Inspector"
  3. Deaktivieren Sie 'Scroll View Insets einstellen'
  4. Genießen!

Ich migriere gerade meine App auf ios 7 und bin seit Stunden auf der neuen Navigation Controller / Bar-Management fest.

Früher, als wir einen Navigationscontroller hatten, hatten wir einen Ausschnitt wie folgt:

UINavigationController *navController = [[UINavigationController alloc]initWithRootViewController:[[MainViewController alloc]init]];

Im Interface Builder hatten wir die Wahl, eine existierende Navigationsleiste für die Ansicht zu setzen und alles dem Inhalt der realen Ansicht anzupassen.

OK, jetzt habe ich keine Ahnung, wie man mit dem Interface Builder richtig baut. Ich habe immer noch mein Snippet, um meinen Navcontroller zu initialisieren. Wenn ich jedoch im Interface Builder für meinen MainViewController eine Statusleiste auf eine transparente oder undurchsichtige Navigationsleiste setze, habe ich oben einen Offset von 44px (siehe unten).


Interface Builder _________________________und das Ergebnis


Wenn ich jetzt die Statusleiste auf none setze, gibt es oben keinen Offset, aber da die Ansicht im Simulator aufgrund der Navigationsleiste kleiner ist, wird der untere Teil der Ansicht im Interface Builder abgeschnitten.

Interface Builder _________________________und das Ergebnis

Ich schätze, ich vermisse hier wirklich etwas, aber ich kann in iOS7 Transitions Guide keine Themen oder Apple-Infos dazu finden.

Danke für Ihre Hilfe


BEARBEITEN

Wie wir in den Bildern sehen können, ist das erste Kind der Ansicht ein UIScrollView, das beide Labels enthält. Das Problem tritt nicht auf, wenn kein scrollview vorhanden ist. Es erscheint auch, wenn es ein UITableView ist. Wenn ein Label außerhalb von UIScrollView liegt, gibt es keinen Offset zu diesem Label.


Bei der automatischen Einstellung von AdjustScrollViewInsets auf YES (die Standardeinstellung) stimmt die Bildlaufpositionierung zwischen ios6 und ios7 nicht überein. Um sie konsistent zu machen, müssen Sie diese Einstellung deaktivieren. Allerdings stürzt ios6 ab, wenn es automatisch erscheint. Justieren Sie ScrollViewInsets, so dass Sie entweder automatisch eine Anpassung von AdjustScrollViewInsets vornehmen müssen, oder ob Sie die Option mithilfe des Storyboards / der NIB ausschalten möchten


Es sieht so aus, als wäre eine Lösung, um die Storyboard-Datei als "iOS 6.1 und früher" zu betrachten (Storyboard-Datei auswählen-> Datei-Inspektor-> Interface Builder-Dokument-> Ansicht als. Das Positionieren von Subviews in diesem Modus zeigt den Offset.


Ich hatte ein ähnliches Problem, nachdem ich einen ViewController entlassen hatte, wurde der ContentOffset von meiner TableView auf (0, -64) geändert.

Meine Lösung war etwas komisch, ich habe alle anderen Antworten ausprobiert, hatte aber keinen Erfolg, das einzige Problem, das mein Problem behob, war, die Position von tableView im Steuerbaum der .xib zu wechseln

Es war das erste Steuerelement in der Elternansicht wie folgt:

Ich habe das TableView direkt nach dem ImageView verschoben und es hat funktioniert:

es scheint, dass das Anordnen der Tabellenansicht in der ersten Position das Problem verursachte und das Verschieben der Tabellenansicht an eine andere Position das Problem behob.

PD Ich benutze weder AutoLayout noch Storyboards

hoffe das kann jemandem helfen!


Ich stieß auf das gleiche Problem, aber ich fand eine ziemlich seltsame Eigenschaft auf dem ViewController im Interface Builder, die das für mich verursacht zu haben scheint. Es gibt ein "Extend Edges" -Kontrollkästchen. Ich habe den Check "Under Top Bars" entfernt, und alles begann für mich richtig auszulegen.


OK damit ich die Lösung gefunden habe, habe ich in meinem Controller die Eigenschaft gesetzt:

self.automaticallyAdjustsScrollViewInsets = false

Ich verstehe den wirklichen Nutzen dieser Eigenschaft jedoch nicht wirklich (oder warum der Standardwert wahr ist)

Die einzige Dokumentation, die ich fand, war da:

Aktualisieren

In iOS 11 wird automaticallyAdjustsScrollViewInsets AdjustScrollViewInsets veraltet

Sie sollten jetzt verwenden:

self.tableView.contentInsetAdjustmentBehavior = .never

Ich ermutige Sie auch, diese Frage und ihre Antwort zu überprüfen, um diese Eigenschaften besser zu verstehen