Thursday 20 July 2017

Edgesforextendedlayout Geschichte Bretter

Ich habe ein Projekt, das im vergangenen Jahr gebaut wurde, und es verwendet XIBs, keine Storyboards. Die XIBs verwenden nicht Auto Layout, aber sie verwenden einige Autosizing. Ich habe ein Problem beim Ausführen mit iOS7, in dem alle Ansichten unter der Statusleiste versteckt sind. Ich verstehe vollkommen, dass dies ein neues Feature mit iOS7 ist, in dem dies zu erwarten ist. Allerdings sind alle Lösungen für die Festsetzung es nicht dies nicht funktionieren. Ich habe ein Bild an der Spitze der Ansicht, die immer unter der Statusleiste zeigt, und Im nicht mit Navigationsleisten oder so ähnlich. Ich habe versucht, die Aktualisierung der Y-Deltas in der XIB (sie haben keinen Einfluss auf die Ansicht), habe ich versucht, die Einstellung der KantenForExtendedLayout zu UIRectEdgeNone (tut nichts), und eine Menge anderer Dinge. Jedes Mal, die Statusleiste zeigt mit der Ansicht unter es versteckt, egal was ich tue. Das ist, es sei denn, ich manuell nach unten bewegen die Ansicht in der XIB, um Platz für die Statusleiste (aber die Lösung funktioniert nicht, weil es nicht rechts in iOS6, natürlich). Was ist seltsam ist, dass selbst wenn ich eine Zeile Code zu hacken in einer View-Shift versuchen, funktioniert es nicht (wie die folgenden): Nicht, dass ich mit dieser Art von Lösung gehen würde, aber seine nur seltsam, dass es nicht funktionieren (die Nur Zeit, die ich normalerweise sehen, dass nicht Arbeit ist, wenn Auto-Layout ist vorhanden, was nicht in diesem Fall). Es ist ein Design-Anforderung, dass die Statusleiste zeigt, und Im nur stumped, warum ich kann nicht die Ansicht, um unter der Statusleiste für iOS7. Ich habe jeden einzelnen Stapelüberlaufpfosten auf dem Thema, sowie Äpfelübergangsguides gelesen. Noch einmal, um zu wiederholen, ich voll und ganz verstehen, wie es funktionieren sollte und was die erwartete Lösung sollte dies, aber nichts davon scheint für dieses spezielle Projekt zu arbeiten. Ich bin ein erfahrener iOS-Entwickler, aber dieses Projekt wurde von einem anderen Team gebaut, so dass ich nicht weiß, ob theres etwas versteckt irgendwo in der XIB-Dateien, Plist oder Code, die Trumpen der oben genannten Einstellungen sein könnte. Mich bitte informieren, wenn es etwas gibt, das auf diesem betrachtet werden kann, oder mehr Informationen, die ich zur Verfügung stellen kann. Vielen Dank im Voraus gefragt, Apple sind drängen Sie auf Autolayout verwenden, um dies zu erreichen. Sie müssen eine Einschränkung für das Top-Layout-Handbuch aus der oberen Teilansicht in Ihrer Ansicht festlegen. Siehe dieses Dokument für Beispiele: Um dies ohne XIBs tun, müssen Sie die Einschränkung programmgesteuert hinzufügen. Äpfel docs geben ein gutes Beispiel von diesem, das Ive zusammengefasst unten. Geben Sie an, dass topLayoutGuide eine Eigenschaft auf einem View-Controller ist, verwenden Sie es einfach in Ihrem Wörterbuch von variablen Bindungen. Dann richten Sie Ihre Einschränkung wie normal ein: 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 angelegt 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 iOS verwenden, 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 an sie anwendet. Das bedeutet natürlich, dass UITableViewController standardmäßig arbeitet (da UITableView die erste Ansicht ist).


No comments:

Post a Comment