Thursday 16 November 2017

Edgesforextendedlayout Navigationsleiste Verschwunden


Fixieren der iOS 7 Navigationsleiste Überlappungsproblem Es gab ein Problem, das iOS-Entwickler geplagt hat, da die ziemlich transparenten Navigationsleisten in iOS 7 herauskamen, etwas, wenn ich Leute frage, warum es passiert, haben sie absolut keine Ahnung. Es gibt eine einfache Korrektur, die jeder benutzt hat, aber es ist 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. Jetzt hat die Nav-Bar keinen Sinn, transparent zu sein, was den Zweck besiegt. Die Ansichten, die dahinter stecken sollten, unsere Wurzelansicht und die Hintergrundfarbe, die sich nicht mehr zeigt. Ehrlich gesagt, es ist Ihnen egal, das könnte für Sie reichen, aber es ist wichtig, dass Sie das Problem immer noch verstehen, also lesen Sie weiter. Wenn du die Web-Entwicklung gemacht hast, ist das ähnlich wie ein Überlauf: in CSS versteckt. Ist der Job, aber es ist immer noch ein Quothackquot. Also das Problem ist, dass, wenn you39re view39s Rahmen gesetzt ist, im Gegensatz zu iOS 6, der Rahmen noch umgibt den Bereich unterhalb der Navigationsleiste. Was hast du vielleicht nicht realisiert, ist ein UIScrollView. Oder eine Unterklasse wie UITableView. Ist die Root-Ansicht für Ihren Controller, es wird it39s contentInset Eigenschaft gesetzt richtig, so dass der Rahmen unter der Navigationsleiste, aber die eigentliche Herkunft beginnt es zu zeichnen ist von der Unterseite der Navigationsleiste statt. Dies bedeutet, dass wir das Problem der Navigationsleiste einfach überlappen können, indem wir unsere Wurzelansicht eine UIScrollView (oder Unterklasse von) stattdessen machen, während wir trotzdem unsere Hintergrundfarbe durchleuchten lassen. Sie können Ihre Root-Ansicht ein UIScrollView erstellen, indem Sie die loadView-Methode definieren, in der Ihre Root-Ansicht und it39s-Subviews erstellt werden sollen, wenn Sie Ihre Ansichten programmgesteuert erstellen. Wenn du das ausprobierst, bekommst du das. Beachten Sie das Rot, das durch die Navigationsleiste glänzt. Beachten Sie, dass wir diesen blauen view39s Ursprung auf die obere linke Ecke setzen. Alles sitzt gut und arbeitet, wie Apple uns erwartet hat, die transparenten Navigationsleisten zu benutzen. Dies hat den zusätzlichen Bonus, um uns einen einfacheren Weg, um unser Layout über den Bildschirm zu erweitern, jetzt, dass wir mit einer Scroll-Ansicht, aber Sie vielleicht nicht brauchen dies sowieso, stattdessen können Sie es einfach als Ersatz für UIView, die it39s haben können ContentInset set. Ich habe in die Gedächtnisunterschiede hineingesehen, aber meine Erwartung ist, dass es extrem minimal wäre. Wenn Sie mehr über RubyMotion erfahren möchten, schauen Sie sich meine Screencasts bei motioninmotion. tv oder meines bevorstehenden Buches RubyMotion for Rails Developers an. Die zur Vorbestellung zur Verfügung steht, unter einem Pay What You Want Preismodell, mit Teil 1 fast fertig und bald veröffentlicht werden. RubyMotion Adventures - Das MotionInMotion BlogStarting in iOS7, die View-Controller verwenden das Vollbild-Layout standardmäßig. Zur gleichen Zeit haben Sie mehr Kontrolle darüber, wie es seine Ansichten ausstellt, und das ist mit diesen Eigenschaften getan: Grundsätzlich, mit dieser Eigenschaft legen Sie fest, welche Seiten Ihrer Ansicht erweitert werden können, um den ganzen Bildschirm zu decken. Stellen Sie sich vor, dass Sie einen UIViewController in einen UINavigationController schieben. Wenn die Ansicht dieses View-Controllers ausgelegt ist, wird es beginnen, wo die Navigationsleiste endet, aber diese Eigenschaft wird festlegen, 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 übernommen (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 wirst du diesen Wert auf UIRectEdgeNone setzen. So dass Sie sagen, die View-Controller nicht zu erweitern die Ansicht, um den Bildschirm zu decken: Diese Eigenschaft wird verwendet, wenn Ihre Ansicht ist ein UIScrollView oder ähnlich, wie ein UITableView. Sie wollen, dass Ihre Tabelle beginnt, wo die Navigationsleiste endet, weil Sie den ganzen Inhalt nicht sehen werden, wenn nicht, aber gleichzeitig möchten Sie, dass Ihr Tisch den gesamten Bildschirm beim Scrollen abdeckt. In diesem Fall wird das Setzen von EdgesForExtendedLayout 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 praktisch ist, wenn man den View-Controller automatisch die Insets anpasst (Einstellung dieser Eigenschaft auf JA, auch den Default-Wert) wird es Insert an die Spitze der Tabelle hinzufügen, so dass die Tabelle beginnt, wo die Navigation Bar endet, aber die Rolle wird den ganzen Bildschirm abdecken. Dies ist, wenn auf NO gesetzt ist: Und JA (standardmäßig): In beiden Fällen blättert die Tabelle hinter der Navigationsleiste, aber im zweiten Fall (JA) beginnt sie von unterhalb der Navigationsleiste. Dieser Wert ist nur eine Ergänzung zu den vorherigen. Wenn die Statusleiste opak ist, werden die Ansichten nicht auf die Statusleiste erweitert, es sei denn, dieser Parameter ist JA. Also, wenn du deine Ansicht verlängst, um die Navigationsleiste zu decken (edgesForExtendedLayout zu UIRectEdgeAll) und der Parameter ist NEIN (Standard), wird es nicht die Statusleiste abdecken, wenn es opak ist. Wenn etwas nicht klar ist, schreiben Sie einen Kommentar und Ill Antwort darauf. Wie IOS weiß, was UIScrollView für die Verwendung von iOS die erste Subview in deiner Viewcontroller-Ansicht, also die bei Index 0, und wenn es eine Unterklasse von UIScrollView dann die erklärten Eigenschaften anwendet. Natürlich bedeutet dies, dass UITableViewController standardmäßig arbeitet (da die UITableView die erste Ansicht ist).

No comments:

Post a Comment