Bezpieczny obszar to przewodnik po układzie (przewodnik po układzie bezpiecznego obszaru ) .
Przewodnik po układzie reprezentujący część widoku, która nie jest zasłonięta przez paski i inną zawartość. W systemie iOS 11+ Apple wycofuje górne i dolne prowadnice układu i zastępuje je przewodnikiem po jednym bezpiecznym obszarze.
Gdy widok jest widoczny na ekranie, ten przewodnik odzwierciedla część widoku, która nie jest objęta innymi treściami. Bezpieczny obszar widoku odzwierciedla obszar pokryty przez paski nawigacji, paski kart, paski narzędzi i inne elementy nadrzędne, które zasłaniają widok kontrolera widoku. (W tvOS, bezpieczny obszar obejmuje ramkę ekranu, zgodnie z definicją overscanCompensationInsets
właściwości UIScreen.) Obejmuje również każdą dodatkową przestrzeń zdefiniowaną przez właściwość kontrolera widoku additionalSafeAreaInsets
. Jeśli widok nie jest aktualnie zainstalowany w hierarchii widoków lub nie jest jeszcze widoczny na ekranie, prowadnica układu zawsze pasuje do krawędzi widoku.
W przypadku widoku głównego kontrolera widoku bezpieczny obszar w tej właściwości reprezentuje całą część zawartości kontrolera widoku, która jest zasłonięta, oraz wszelkie dodatkowe określone wstawki. W przypadku innych widoków w hierarchii widoków bezpieczny obszar odzwierciedla tylko część tego widoku, która jest zasłonięta. Na przykład, jeśli widok znajduje się całkowicie w bezpiecznym obszarze widoku głównego kontrolera widoku, wstawki krawędzi w tej właściwości są równe 0.
Według Apple Xcode 9 - Release note
Interface Builder używa UIView.safeAreaLayoutGuide jako zamiennika dla przestarzałych przewodników układu Top i Bottom w UIViewController. Aby użyć nowego bezpiecznego obszaru, wybierz Bezpieczne prowadnice układu obszaru w Inspektorze plików dla kontrolera widoku, a następnie dodaj ograniczenia między zawartością a nowymi kotwicami bezpiecznego obszaru. Zapobiega to zasłonięciu treści przez górne i dolne paski oraz przez region overscan w systemie tvOS. W przypadku wdrażania we wcześniejszych wersjach systemu iOS ograniczenia w obszarze bezpiecznym są konwertowane na górę i dół.
Oto proste odniesienie jako porównanie (w celu uzyskania podobnego efektu wizualnego) między istniejącym (górnym i dolnym) przewodnikiem po układzie a przewodnikiem po układzie bezpiecznego obszaru.
Układ bezpiecznego obszaru:
Autoukład
Jak pracować z Safe Area Layout?
Wykonaj następujące kroki, aby znaleźć rozwiązanie:
- Włącz „Bezpieczny układ obszaru”, jeśli nie jest włączony.
- Usuń „wszystkie ograniczenia”, jeśli pokazują połączenie z Super View i ponownie dołącz wszystko za pomocą bezpiecznego zakotwiczenia układu. LUB Kliknij dwukrotnie ograniczenie i edytuj połączenie z super widoku do kotwicy SafeArea
Oto przykładowa migawka, jak włączyć układ obszaru bezpiecznego i ograniczenie edycji.
Oto wynik powyższych zmian
Projektowanie układu za pomocą SafeArea
Projektując dla iPhone'a X, należy upewnić się, że układy wypełniają ekran i nie są zasłaniane przez zaokrąglone rogi urządzenia, obudowę czujnika lub wskaźnik dostępu do ekranu głównego.
Większość aplikacji korzystających ze standardowych elementów interfejsu użytkownika dostarczonych przez system, takich jak paski nawigacyjne, tabele i kolekcje, automatycznie dostosowuje się do nowego kształtu urządzenia. Materiały tła rozciągają się do krawędzi ekranu, a elementy interfejsu użytkownika są odpowiednio wstawione i ustawione.
W przypadku aplikacji z niestandardowymi układami obsługa iPhone'a X powinna być również stosunkowo łatwa, zwłaszcza jeśli aplikacja korzysta z automatycznego układu i jest zgodna z prowadnicami dotyczącymi bezpiecznego obszaru i marginesów.
Oto przykładowy kod (patrz: Przewodnik dotyczący układu bezpiecznego obszaru ) :
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:
private let greenView = UIView()
Moglibyśmy mieć funkcję do ustawiania widoków i ograniczeń wywoływanych z viewDidLoad:
private func setupView() {
greenView.translatesAutoresizingMaskIntoConstraints = false
greenView.backgroundColor = .green
view.addSubview(greenView)
}
Utwórz wiodące i końcowe ograniczenia marginesów, jak zawsze, używając layoutMarginsGuide widoku głównego:
let margins = view.layoutMarginsGuide
NSLayoutConstraint.activate([
greenView.leadingAnchor.constraint(equalTo: margins.leadingAnchor),
greenView.trailingAnchor.constraint(equalTo: margins.trailingAnchor)
])
Teraz, chyba że celujesz tylko w iOS 11, 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:
if #available(iOS 11, *) {
let guide = view.safeAreaLayoutGuide
NSLayoutConstraint.activate([
greenView.topAnchor.constraintEqualToSystemSpacingBelow(guide.topAnchor, multiplier: 1.0),
guide.bottomAnchor.constraintEqualToSystemSpacingBelow(greenView.bottomAnchor, multiplier: 1.0)
])
} else {
let standardSpacing: CGFloat = 8.0
NSLayoutConstraint.activate([
greenView.topAnchor.constraint(equalTo: topLayoutGuide.bottomAnchor, constant: standardSpacing),
bottomLayoutGuide.topAnchor.constraint(equalTo: greenView.bottomAnchor, constant: standardSpacing)
])
}
Wynik:
Po UIView
rozszerzeniu ułatw sobie programową pracę z SafeAreaLayout.
extension UIView {
// Top Anchor
var safeAreaTopAnchor: NSLayoutYAxisAnchor {
if #available(iOS 11.0, *) {
return self.safeAreaLayoutGuide.topAnchor
} else {
return self.topAnchor
}
}
// Bottom Anchor
var safeAreaBottomAnchor: NSLayoutYAxisAnchor {
if #available(iOS 11.0, *) {
return self.safeAreaLayoutGuide.bottomAnchor
} else {
return self.bottomAnchor
}
}
// Left Anchor
var safeAreaLeftAnchor: NSLayoutXAxisAnchor {
if #available(iOS 11.0, *) {
return self.safeAreaLayoutGuide.leftAnchor
} else {
return self.leftAnchor
}
}
// Right Anchor
var safeAreaRightAnchor: NSLayoutXAxisAnchor {
if #available(iOS 11.0, *) {
return self.safeAreaLayoutGuide.rightAnchor
} else {
return self.rightAnchor
}
}
}
Oto przykładowy kod w Objective-C :
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