Während der Erkundung von Xcode9 Beta wurde in Interface Buildern ein sicherer Bereich gefunden. Hierarchie-Viewer anzeigen . Ich wurde neugierig und versuchte, etwas über die Dokumentation von Safe Area on Apples zu erfahren. Im Wesentlichen heißt es in dem Dokument "Der Ansichtsbereich, der direkt mit dem automatischen Layout interagiert". Aber es hat mich nicht befriedigt, ich möchte wissen, wie diese neue Sache praktisch angewendet wird.
Hat jemand eine Ahnung?
Fazit Absatz aus Apple-Dokument für den sicheren Bereich.
Die UILayoutGuide-Klasse wurde entwickelt, um alle Aufgaben auszuführen, die zuvor von Dummy-Ansichten ausgeführt wurden, jedoch auf sicherere und effizientere Weise. Layout-Anleitungen definieren keine neue Ansicht. Sie nehmen nicht an der Ansichtshierarchie teil. Stattdessen definieren sie einfach einen rechteckigen Bereich im Koordinatensystem ihrer eigenen Ansicht, der mit dem automatischen Layout interagieren kann.
Antworten:
Wenn die Ansicht auf dem Bildschirm sichtbar ist, spiegelt diese Anleitung den Teil der Ansicht wider, der nicht von anderen Inhalten abgedeckt wird. Der sichere Bereich einer Ansicht spiegelt den Bereich wider, der von Navigationsleisten, Registerkartenleisten, Symbolleisten und anderen Vorfahren abgedeckt wird, die die Ansicht eines Ansichtscontrollers verdecken. (In tvOS enthält der sichere Bereich die Bildschirmblende, wie durch die
overscanCompensationInsets
Eigenschaft von UIScreen definiert.) Er deckt auch jeden zusätzlichen Bereich ab, der durch die Eigenschaft des View Controllers definiert istadditionalSafeAreaInsets
. Wenn die Ansicht derzeit nicht in einer Ansichtshierarchie installiert ist oder noch nicht auf dem Bildschirm angezeigt wird, stimmt die Layoutanleitung immer mit den Rändern der Ansicht überein.Für die Stammansicht des Ansichtscontrollers repräsentiert der sichere Bereich in dieser Eigenschaft den gesamten Teil des verdeckten Inhalts des Ansichtscontrollers und alle von Ihnen angegebenen zusätzlichen Einfügungen. Bei anderen Ansichten in der Ansichtshierarchie spiegelt der sichere Bereich nur den Teil dieser Ansicht wider, der verdeckt ist. Befindet sich eine Ansicht beispielsweise vollständig im sicheren Bereich der Stammansicht des Ansichtscontrollers, sind die Kanteneinfügungen in dieser Eigenschaft 0.
Hier finden Sie eine einfache Referenz als Vergleich (um einen ähnlichen visuellen Effekt zu erzielen) zwischen dem vorhandenen Layout-Handbuch (oben und unten) und dem Layout-Handbuch für sichere Bereiche.
Layout für sichere Bereiche:
AutoLayout
Wie arbeite ich mit Safe Area Layout?
Befolgen Sie diese Schritte, um eine Lösung zu finden:
Hier ist ein Beispiel-Snapshot, wie Sie das Layout für sichere Bereiche aktivieren und Einschränkungen bearbeiten können.
Hier ist das Ergebnis der obigen Änderungen
Layoutdesign mit SafeArea
Beim Entwerfen für das iPhone X müssen Sie sicherstellen, dass Layouts den Bildschirm ausfüllen und nicht durch die abgerundeten Ecken des Geräts, das Sensorgehäuse oder die Anzeige für den Zugriff auf den Startbildschirm verdeckt werden.
Die meisten Apps, die standardmäßige, vom System bereitgestellte Benutzeroberflächenelemente wie Navigationsleisten, Tabellen und Sammlungen verwenden, passen sich automatisch an den neuen Formfaktor des Geräts an. Hintergrundmaterialien erstrecken sich bis zu den Rändern der Anzeige, und die Elemente der Benutzeroberfläche werden entsprechend eingefügt und positioniert.
Für Apps mit benutzerdefinierten Layouts sollte die Unterstützung des iPhone X auch relativ einfach sein, insbesondere wenn Ihre App das automatische Layout verwendet und die Richtlinien für das Layout sicherer Bereiche und Ränder einhält.
Hier ist Beispielcode (siehe: Safe Area Layout Guide ) :
Wenn Sie Ihre Einschränkungen im Code erstellen, verwenden Sie die Eigenschaft safeAreaLayoutGuide von UIView, um die relevanten Layoutanker abzurufen. Lassen Sie uns das obige Interface Builder-Beispiel im Code neu erstellen, um zu sehen, wie es aussieht:
Angenommen, wir haben die grüne Ansicht als Eigenschaft in unserem Ansichts-Controller:
Möglicherweise haben wir eine Funktion zum Einrichten der Ansichten und Einschränkungen, die von viewDidLoad aufgerufen werden:
Erstellen Sie die Einschränkungen für führende und nachfolgende Ränder wie immer mit dem layoutMarginsGuide der Stammansicht:
Wenn Sie nicht nur auf iOS 11 abzielen, müssen Sie die Einschränkungen für die Layout-Anleitung für sichere Bereiche mit #available umschließen und für frühere iOS-Versionen auf die oberen und unteren Layout-Anleitungen zurückgreifen:
Ergebnis:
Nach
UIView
Verlängerung, macht es Ihnen leicht , mit SafeAreaLayout programmatisch zu arbeiten.Hier ist Beispielcode in Objective-C :
Hier ist die offizielle Dokumentation von Apple Developer für das Layout von sicheren Bereichen
Für die Gestaltung der Benutzeroberfläche des iPhone-X ist ein sicherer Bereich erforderlich. Hier finden Sie grundlegende Richtlinien zum Entwerfen der Benutzeroberfläche für das iPhone-X mithilfe des Safe Area Layout
quelle
margins
undview.leadingAnchor
betrifft: Wenn Sie verwendenlet margins = view.layoutMarginsGuide
und später verwendenmargins.leadingAnchor
, beschränken Sie die Ansicht auf die Ränder der Ansicht. Dies fügt den Seiten zusätzlichen Platz hinzu. Wenn Sie das nicht wollen, verwenden Sie einfachview.leadingAnchor
undview.trailingAnchor
und Sie werden links oder rechts keinen Leerraum sehen ...Ich möchte etwas erwähnen , das mich zuerst beeindruckt hat, als ich versuchte, eine SpriteKit-basierte App anzupassen, um die runden Kanten und "Kerben" des neuen iPhone X zu vermeiden, wie in den neuesten Richtlinien für Benutzeroberflächen vorgeschlagen : Die neue Eigenschaft
safeAreaLayoutGuide
vonUIView
muss abgefragt werden, nachdem die Ansicht zur Hierarchie hinzugefügt wurde (z. B. ein-viewDidAppear:
), um einen aussagekräftigen Layoutrahmen zu melden (andernfalls wird nur die Vollbildgröße zurückgegeben).Aus der Dokumentation der Unterkunft:
(Hervorhebung von mir)
Wenn Sie es bereits lesen
-viewDidLoad:
, wird daslayoutFrame
des Handbuchs{{0, 0}, {375, 812}}
anstelle des erwarteten sein{{0, 44}, {375, 734}}
quelle
UIKit
verwendet die topLayoutGuide & bottomLayoutGuide das istUIView
EigentumiOS11 + verwendet den SafeAreaLayoutGuide, der ebenfalls
UIView
Eigentum istAktivieren Sie das Kontrollkästchen " Leitfaden für das Layout sicherer Bereiche" im Dateiinspektor .
Mithilfe sicherer Bereiche können Sie Ihre Ansichten im sichtbaren Bereich der gesamten Benutzeroberfläche platzieren.
In tvOS enthält der sichere Bereich auch die Overscan-Einsätze des Bildschirms, die den Bereich darstellen, der von der Bildschirmblende abgedeckt wird.
Verwenden Sie sichere Bereiche als Hilfsmittel für die Gestaltung Ihrer Inhalte wie
UIButton
usw.Beim Entwerfen für das iPhone X müssen Sie sicherstellen, dass Layouts den Bildschirm ausfüllen und nicht durch die abgerundeten Ecken des Geräts, das Sensorgehäuse oder die Anzeige für den Zugriff auf den Startbildschirm verdeckt werden.
Stellen Sie sicher, dass sich die Hintergründe bis zu den Rändern der Anzeige erstrecken und dass vertikal scrollbare Layouts wie Tabellen und Sammlungen bis zum Ende fortgesetzt werden.
Die Statusleiste ist auf dem iPhone X höher als auf anderen iPhones. Wenn Ihre App eine feste Statusleistenhöhe für die Positionierung von Inhalten unterhalb der Statusleiste annimmt, müssen Sie Ihre App aktualisieren, um Inhalte basierend auf dem Gerät des Benutzers dynamisch zu positionieren. Beachten Sie, dass sich die Höhe der Statusleiste auf dem iPhone X nicht ändert, wenn Hintergrundaufgaben wie Sprachaufzeichnung und Standortverfolgung aktiv sind
print(UIApplication.shared.statusBarFrame.height)//44 for iPhone X, 20 for other iPhones
Die Höhe des Home-Indikatorbehälters beträgt 34 Punkte.
Sobald Sie das Layouthandbuch für sichere Bereiche aktiviert haben, wird die Eigenschaft für Einschränkungen für sichere Bereiche im Interface Builder angezeigt.
Sie können Einschränkungen mit jeweils
self.view.safeAreaLayoutGuide
as- festlegenObjekt:
Schnell:
quelle
Apple hat den topLayoutGuide und den bottomLayoutGuide bereits in iOS 7 als Eigenschaften von UIViewController eingeführt. Mit ihnen konnten Sie Einschränkungen erstellen, um zu verhindern, dass Ihre Inhalte von UIKit-Leisten wie Status, Navigation oder Registerkartenleiste ausgeblendet werden. Diese Layout-Anleitungen sind in iOS 11 veraltet und werden durch eine einzige Layout-Anleitung für sichere Bereiche ersetzt.
Weitere Informationen finden Sie unter dem Link .
quelle
Der sichere Bereich ist der Bereich zwischen den Elementen der Systemoberfläche, z. B. Statusleiste, Navigationsleiste und Symbolleiste oder Registerkartenleiste. Wenn Sie Ihrer App eine Statusleiste hinzufügen, wird der sichere Bereich verkleinert. Wenn Sie Ihrer App eine Navigationsleiste hinzufügen, wird der sichere Bereich erneut verkleinert.
Auf dem iPhone X bietet der sichere Bereich zusätzliche Einfügungen von den oberen und unteren Bildschirmkanten im Hochformat, auch wenn kein Balken angezeigt wird. Im Querformat ist der sichere Bereich an den Seiten der Bildschirme und der Startanzeige eingefügt.
Dies stammt aus Apples Video Designing für iPhone X, in dem auch dargestellt wird, wie sich verschiedene Elemente auf den sicheren Bereich auswirken.
quelle