Ich migriere derzeit meine App auf iOS 7 und bin stundenlang mit dem neuen Navigationscontroller / Bar-Management beschäftigt.
Früher, als wir einen Navigationscontroller hatten, hatten wir einen Ausschnitt wie diesen:
UINavigationController *navController = [[UINavigationController alloc]initWithRootViewController:[[MainViewController alloc]init]];
Im Interface Builder hatten wir die Wahl, eine vorhandene Navigationsleiste für die Ansicht festzulegen, und alles entspricht dem Inhalt der realen Ansicht.
OK, jetzt habe ich keine Ahnung, wie ich mit dem Interface Builder richtig entwerfen soll. 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 durchscheinende oder undurchsichtige Navigationsleiste setze, habe ich oben einen Versatz von 44 Pixel (siehe unten).
Interface Builder_________________________Und das Ergebnis
Wenn ich nun die Statusleiste auf keine setze, gibt es oben keinen Versatz, aber da die Ansicht im Simulator aufgrund der Navigationsleiste kleiner ist, wird der untere Rand der Ansicht im Interface Builder abgeschnitten.
Interface Builder_________________________Und das Ergebnis
Ich denke, ich vermisse hier wirklich etwas, aber ich kann kein Thema oder Apple-Informationen im iOS7 Transitions Guide dazu finden.
Danke für Ihre Hilfe
BEARBEITEN
Wie wir auf den Bildern sehen können, ist das erste untergeordnete Element der Ansicht eine UIScrollView, die beide Beschriftungen enthält. Das Problem tritt nicht auf, wenn keine Bildlaufansicht vorhanden ist. Es wird auch angezeigt, wenn es sich um eine UITableView handelt. Befindet sich eine Beschriftung außerhalb von UIScrollView, gibt es keinen Versatz zu dieser Beschriftung.
Antworten:
OK, also habe ich die Lösung gefunden, ich habe in meinem Controller die Eigenschaft festgelegt:
Ich verstehe den wahren Nutzen dieser Eigenschaft jedoch nicht wirklich (oder warum der Standardwert wahr ist).
Die einzige Dokumentation, die ich gefunden habe, war dort:
Aktualisieren
In iOS 11
automaticallyAdjustsScrollViewInsets
ist veraltetSie sollten jetzt verwenden:
Ich empfehle Ihnen auch, diese Frage und ihre Antwort zu überprüfen , um ein besseres Verständnis dieser Eigenschaften zu erhalten
quelle
UIScrollView
scrolle. Aber ohne das kann ich den Offset nicht loswerden. Weired ...@ Justafingers Antwort hat auch für mich wie ein Zauber gewirkt.
Ich wollte nur hinzufügen, dass diese Einstellung auch einfach über den Interface Builder angepasst werden kann.
quelle
Ich bin auf dasselbe Problem gestoßen, habe aber im ViewController im Interface Builder eine ziemlich seltsame Eigenschaft gefunden, die dies für mich verursacht zu haben scheint. Es gibt eine Reihe von Kontrollkästchen "Kanten verlängern". Ich habe den Check "Under Top Bars" entfernt und alles begann für mich richtig zu gestalten.
quelle
Wenn automatischAdjustsScrollViewInsets auf YES (Standardeinstellung) gesetzt ist, stimmt die Position der Bildlaufansicht zwischen ios6 und ios7 nicht überein. Um sie konsistent zu machen, müssen Sie diese Einstellung deaktivieren. Ios6 stürzt jedoch ab, wenn es automatisch auf AdjustsScrollViewInsets stößt. Daher müssen Sie entweder eine programmgesteuerte Änderung von automaticAdjustsScrollViewInsets von ios7 abhängig machen oder die Option über das Storyboard / die NIB deaktivieren
quelle
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
Ich stehe auch vor diesem Problem.
UIScrollView
Die Inhaltsgröße wird vom Betriebssystem wie andere Größen berechnet, deren Ursprung vom Einschränkungssystem bereitgestellt wird. Aus diesem Grund hat das Betriebssystem Zweifel.So beheben Sie das Problem - Sie sollten die Inhaltsgröße explizit definieren für
UIScrollView
:UIView
(ich benenne ihn in umContentView
)ContentView.Weight = View.Weight
undContentView.Height = View.Height
quelle
Es scheint, als würde eine Problemumgehung darin bestehen, die Storyboard-Datei als "iOS 6.1 und früher" anzuzeigen (wählen Sie die Storyboard-Datei-> Dateiinspektor-> Interface Builder-Dokument-> Anzeigen als. Wenn Sie Unteransichten in diesem Modus positionieren, wird der Versatz angezeigt.
quelle
Vielen Dank für die Lösungen! Ich hatte stundenlang Mühe, das Problem zu lösen. Alles war in Ordnung, wenn keine Navigationsleiste beteiligt war, aber es ging durcheinander, als ich den ViewController in einen NavigationController einbettete.
Ich löste es durch die unchecking Ansicht Insets einstellen Scroll und die Unter Top Bars . Beide befinden sich im Attributinspektor des ViewControllers. Tausend Dank!
quelle