Ponieważ nie używam scenorysów do tworzenia widoków, zastanawiałem się, czy istnieje programowa opcja „Użyj prowadnic obszaru bezpiecznego”, czy coś w tym rodzaju.
Próbowałem zakotwiczyć swoje poglądy
view.safeAreaLayoutGuide
ale w symulatorze iPhone'a X wciąż zachodzą na siebie.
ios
swift
iphone-x
safearealayoutguide
Phillip
źródło
źródło
view.safeAreaInsets
? Próbowałeś tego?Odpowiedzi:
Oto przykładowy kod (Ref from: Safe Area Layout Guide ):
Jeśli tworzysz ograniczenia w kodzie, użyj właściwości safeAreaLayoutGuide UIView, aby uzyskać odpowiednie kotwice układu. Odtwórzmy powyższy przykład Interface Builder w kodzie, aby zobaczyć, jak to wygląda:
Zakładając, że mamy zielony widok jako właściwość w naszym kontrolerze widoku:
Moglibyśmy mieć funkcję do ustawiania widoków i ograniczeń wywoływanych z viewDidLoad:
Utwórz wiodące i końcowe ograniczenia marginesu, jak zawsze, używając layoutMarginsGuide widoku głównego:
Teraz, chyba że celujesz w system iOS 11 lub nowszy, będziesz musiał zawinąć ograniczenia prowadnicy układu bezpiecznego obszaru za pomocą #available i wrócić do górnych i dolnych prowadnic układu dla wcześniejszych wersji iOS:
Wynik:
Oto oficjalna dokumentacja programisty Apple dotycząca przewodnika po układzie bezpiecznego obszaru
Obszar bezpieczny jest wymagany do obsługi projektowania interfejsu użytkownika dla iPhone-X. Oto podstawowe wytyczne dotyczące projektowania interfejsu użytkownika dla telefonu iPhone-X przy użyciu układu bezpiecznego obszaru
źródło
Właściwie używam do tego rozszerzenia i kontroluję, czy jest to iOS 11, czy nie.
źródło
self.safeAreaLayoutGuide
zamiastself.layoutMarginsGuide
. Bezpieczny użyty w tej odpowiedzi działał poprawnie, aby pozostać w bezpiecznym obszarze! Jedną rzeczą, którą sugerowałbym zmianę, byłoby użycieleadingAnchor
itrailingAnchor
zamiastleftAnchor
irightAnchor
. Brawo!SafeAreaLayoutGuide
jestUIView
własnością,Użyj,
safeAreaLayoutGuide
aby uniknąć przycinania / nakładania się naszych obiektów z zaokrąglonych narożników, pasków nawigacji, pasków kart, pasków narzędzi i innych widoków przodków.Możemy odpowiednio utworzyć
safeAreaLayoutGuide
obiekt i ustawić ograniczenia obiektu.Ograniczenia dla pozycji pionowej i poziomej to -
UILayoutGuide
safeAreaLayoutGuide
źródło
viewDidAppear
, chyba że absolutnie wiesz, co robisz.viewDidAppear
jest wywoływana wiele razy, więc Twoje ograniczenia będą powielane za każdym razem, gdy zostanie wywołane.Dla tych z Was, którzy używają SnapKit , tak jak ja, rozwiązaniem jest zakotwiczenie twoich ograniczeń, aby
view.safeAreaLayoutGuide
polubić:źródło
Używam tego zamiast dodawać wiodące i końcowe ograniczenia marginesów do układu:
Proszę również zaznaczyć opcję dla niższej wersji ios 11 z odpowiedzi Krunala.
źródło
Użycie
UIWindow
lubUIView
„ssafeAreaInsets
.bottom
.top
.left
.right
źródło
Użyj ograniczeń z formatem wizualnym, a zyskasz szacunek dla bezpiecznego obszaru za darmo.
źródło
Rozszerzenie bezpiecznego obszaru dla Objective-C
źródło
Swift 4.2 i 5.0. Załóżmy, że chcesz dodać wiodące, końcowe, górne i dolne ograniczenia na viewBg. Możesz więc użyć poniższego kodu.
źródło
To rozszerzenie pomaga ograniczyć UIVIew do jego superview i superview + safeArea:
źródło
Możesz użyć view.safeAreaInsets, jak wyjaśniono tutaj https://www.raywenderlich.com/174078/auto-layout-visual-format-language-tutorial-2
przykładowy kod (pobrany z raywenderlich.com):
źródło