Edgesforextendedlayout Navigationsleiste


Ab iOS7 verwenden die View-Controller standardmäßig das Vollbild-Layout. Gleichzeitig haben Sie mehr Kontrolle darüber, wie es seine Ansichten ausgibt, und das ist mit diesen Eigenschaften getan: Grundsätzlich legen Sie mit dieser Eigenschaft fest, welche Seiten Ihrer Ansicht erweitert werden können, um den gesamten Bildschirm zu decken. Stellen Sie sich vor, Sie schieben einen UIViewController in einen UINavigationController. Wenn die Ansicht des View-Controllers ausgelegt ist, wird es gestartet, wo die Navigationsleiste endet, aber diese Eigenschaft stellt fest, welche Seiten der Ansicht (oben, links, unten, rechts) erweitert werden können, um den gesamten Bildschirm zu füllen. Lassen Sie es mit einem Beispiel sehen: Hier legen Sie den Wert von edgesForExtendedLayout nicht fest. Daher wird der Standardwert genommen (UIRectEdgeAll), so dass die Ansicht ihr Layout erweitert, um den gesamten Bildschirm zu füllen. Dies ist das Ergebnis: Wie Sie sehen können, erstreckt sich der rote Hintergrund hinter der Navigationsleiste und der Statusleiste. Jetzt werden Sie diesen Wert auf UIRectEdgeNone setzen. So dass Sie sagen, die Ansicht-Controller nicht erweitern Sie die Ansicht auf den Bildschirm zu decken: Diese Eigenschaft wird verwendet, wenn Ihre Ansicht ein UIScrollView oder ähnliches ist, wie ein UITableView. Sie möchten, dass Ihre Tabelle anfängt, wo die Navigationsleiste endet, weil Sie den gesamten Inhalt nicht sehen, wenn nicht, aber gleichzeitig möchten Sie, dass Ihr Tisch den gesamten Bildschirm beim Scrollen abdeckt. In diesem Fall wird das Setzen von KantenForExtendedLayout auf None nicht funktionieren, da Ihre Tabelle beginnt zu scrollen, wo die Navigationsleiste endet und es wird nicht dahinter gehen. Hier ist, wo diese Eigenschaft ist praktisch, wenn Sie lassen Sie die View-Controller automatisch passen Sie die Einfügungen (Einstellung dieser Eigenschaft auf YES, auch der Standardwert) wird es Insert an der Spitze der Tabelle hinzufügen, so dass die Tabelle beginnt, wo die Navigation Bar-Enden, aber die Spirale wird den gesamten Bildschirm zu decken. Das ist, wenn auf NEIN eingestellt ist: und JA (standardmäßig): In beiden Fällen blättert die Tabelle hinter der Navigationsleiste, aber im zweiten Fall (JA) wird sie unterhalb der Navigationsleiste gestartet. Dieser Wert ist nur eine Ergänzung zu den vorherigen. Wenn die Statusleiste undurchsichtig ist, werden die Ansichten nicht um die Statusleiste erweitert, es sei denn, dieser Parameter ist JA. Wenn Sie Ihre Ansicht erweitern, um die Navigationsleiste (edgesForExtendedLayout zu UIRectEdgeAll) zu decken, und der Parameter NO (Standard) ist, wird sie die Statusleiste nicht decken, wenn sie undurchsichtig ist. Wenn etwas nicht klar ist, schreiben Sie einen Kommentar und Kranke Antwort darauf. Wie iOS weiß, was UIScrollView verwenden iOS greift die erste Unteransicht in Ihrer viewcontroller-Ansicht, so dass die eine bei Index 0, und wenn seine eine Unterklasse von UIScrollView dann die erklärten Eigenschaften anwendet es. Natürlich bedeutet dies, dass UITableViewController standardmäßig funktioniert (seit dem UITableView ist die erste Ansicht).Fixing der iOS 7 Navigationsleiste Overlap-Problem Es ist ein Problem, das IRA-Plagen geplagt hat, da die ziemlich transparente Navigationsleisten kam in iOS 7 , Etwas, wenn ich die Leute frage, warum es passiert, haben sie absolut keine Ahnung. Es gibt eine einfache Verlegenheit, die jeder benutzt hat, aber it39s ein Hack und viele Entwickler haben es gerade benutzt, ohne das Problem zu verstehen. Setzen Sie das in Ihren Controller und plötzlich funktioniert es einfach. irgendwie. Nun hat die Navigationsleiste keinen Sinn, transparent zu sein, was den Zweck besiegt. Die Ansichten, die dahinter sein sollten, unsere Wurzelansicht und it39s Hintergrundfarbe, aren39t, das durch mehr zeigt. Ehrlich gesagt, können Sie nicht interessieren, könnte dies genug für Sie, aber es ist wichtig, dass Sie immer noch das Problem verstehen, so lesen Sie weiter. Wenn you39ve getan Web-Entwicklung, das ist sorta wie Überlauf: in CSS versteckt. Hat den Job, aber es ist immer noch Art von einem Quothackquot. So ist das Problem, dass, wenn Sie39re view39s Rahmen gesetzt ist, im Gegensatz zu iOS 6, der Rahmen noch den Bereich unterhalb der Navigationsleiste umfasst. Was Sie vielleicht nicht realisiert haben, ist, wenn ein UIScrollView. Oder eine Unterklasse wie UITableView. Ist die Wurzelansicht für Ihren Controller, es wird it39s contentInset - Eigenschaftssatz korrekt haben, so dass der Rahmen unter der Navigationsleiste sein kann, aber der eigentliche Ursprung, den er mit der Zeichnung beginnt, befindet sich stattdessen am unteren Rand der Navigationsleiste. Dies bedeutet, dass wir das Problem der Überlappung der Navigationsleiste sehr einfach beheben können, indem wir unsere root-Ansicht stattdessen mit einer UIScrollView (oder Unterklasse von) versehen, während wir trotzdem unsere Hintergrundfarbe durchscheinen lassen. Sie können Ihre Root-Ansicht ein UIScrollView erstellen, indem Sie die loadView-Methode definieren, in der Ihre root-Ansicht und it39s-Unterberichte erstellt werden sollen, wenn Sie Ihre Ansichten programmgesteuert erstellen. Wenn Sie dies ausprobieren, erhalten Sie diese. Beachten Sie das rote Leuchten durch die Navigationsleiste Beachten Sie, dass wir setzen, dass blaue view39s Herkunft die obere linke Ecke sein Alles ist gut sitzen und arbeiten, wie Apple erwartet, dass wir die transparenten Navigationsleisten verwenden. Dies hat den zusätzlichen Vorteil, dass uns ein einfacher Weg, um unser Layout über den Bildschirm zu jetzt, dass wir39re mit einer Scroll-Ansicht zu erweitern, aber Sie möglicherweise nicht brauchen, diese sowieso, sondern können Sie es einfach als Ersatz für UIView, die it39s haben können ContentInset-Set. Ich haven39t schaute in die Gedächtnisunterschiede für dieses, aber meine Erwartung ist, dass es extrem minimal sein würde. Wenn Sie mehr über RubyMotion erfahren möchten, schauen Sie sich meine Screencasts bei motioninmotion. tv oder meinem kommenden Buch RubyMotion for Rails Developers an. Die für Pre-Order jetzt verfügbar ist, unter einem Pay What You Want Preismodell, mit Teil 1 fast fertig und wird bald veröffentlicht werden. RubyMotion Abenteuer - Der MotionInMotion Blog

Comments