Bezpieczny obszar Xcode 9
Podczas eksploracji Xcode9 Beta znalazł Bezpieczny Obszar w przeglądarce hierarchii widoku budowniczych interfejsów. Byłem ciekawy i próbowałem dowiedzieć się o bezpiecznym obszarze na dokumentacji jabłek, w gist Doc mówi "obszar widoku, który bezpośrednio współdziała z układem Auto" , Ale mnie to nie zadowoliło, chcę wiedzieć praktyczne zastosowanie tej nowej rzeczy.
Czy ktoś ma jakąś wskazówkę?
Podsumowanie akapitu z Apple doc for Safe miejsce.
Klasa UILayoutGuide została zaprojektowana tak, aby wykonywać wszystkie zadania wykonywane wcześniej przez atrapy widoków, ale aby robić to w bezpieczniejszy i bardziej efektywny sposób. Linie pomocnicze układu nie definiują nowego widoku. Nie uczestniczą w hierarchii widoków. Zamiast tego po prostu definiują prostokątny obszar w układzie współrzędnych własnego widoku, który może wchodzić w interakcje z układem automatycznym.
5 answers
Safe Area is a layout guide (Safe Area Layout Guide).
Przewodnik po Układzie reprezentujący część widoku, która nie jest niewidoczna przez paski i inną zawartość. W systemie iOS 11+ firma Apple wycofuje górne i dolne linie pomocnicze układu i zastępuje je pojedynczym przewodnikiem po Układzie obszaru bezpiecznego.
Gdy widok jest widoczny na ekranie, ten przewodnik odzwierciedla część widoku, która nie jest objęta inną zawartością. Bezpieczny obszar widzenia odzwierciedla obszar objęty paskami nawigacji, paskami kart, paskami narzędzi i innymi przodkami, które zaciemniają widok kontrolera widoku. (W tvOS obszar bezpieczny zawiera ramkę ekranu, zdefiniowaną przez właściwość overscanCompensationInsets
UIScreen.) Obejmuje również dowolną dodatkową przestrzeń zdefiniowaną przez właściwość additionalSafeAreaInsets
kontrolera widoku. Jeśli widok nie jest aktualnie zainstalowany w hierarchii widoku lub nie jest jeszcze widoczny na ekranie, Przewodnik po Układzie zawsze odpowiada krawędziom widoku.
Dla głównego widoku kontrolera widoku, obszar bezpieczny w tej właściwości reprezentuje całą zasłoniętą część zawartości kontrolera widoku oraz wszelkie dodatkowe określone wstawki. W przypadku innych widoków w hierarchii widoków obszar bezpieczny odzwierciedla tylko zasłoniętą część tego widoku. Na przykład, jeśli Widok znajduje się całkowicie w bezpiecznym obszarze głównego widoku kontrolera widoku, wstawki krawędzi w tej właściwości wynoszą 0.
Według Apple, Xcode 9-Release note
interfejs Builder używa UIView.safeAreaLayoutGuide jako zamiennik przestarzałych górnych i dolnych prowadnic układu w UIViewController. Aby użyć nowego obszaru bezpiecznego, wybierz linie pomocnicze układu obszaru bezpiecznego w Inspektorze plików kontrolera widoku, a następnie dodaj ograniczenia między zawartością a nowymi zakotwiczeniami obszaru bezpiecznego. Zapobiega to zasłanianiu zawartości przez górne i dolne paski oraz przez obszar overscan w tvOS. Ograniczenia do bezpiecznego obszaru są konwertowane na górę i dół podczas wdrażania do wcześniejsze wersje iOS.
Oto proste odniesienie jako porównanie (aby uzyskać podobny efekt wizualny) pomiędzy istniejącym (górnym i dolnym) przewodnikiem po Układzie i przewodnikiem po bezpiecznym obszarze.
Układ Obszaru Bezpiecznego:
AutoLayout
Jak pracować z układem obszaru bezpiecznego?
Wykonaj następujące kroki, aby znaleźć rozwiązanie:
- Włącz "Bezpieczny układ obszaru", jeśli nie włączone.
- Usuń "wszystkie ograniczenia", jeśli pokazują połączenie z super view i ponownie dołącz wszystkie za pomocą bezpiecznej kotwicy układu. Można też dwukrotnie kliknąć ograniczenie i edytować połączenie z super view do kotwicy SafeArea
Oto przykładowa migawka, jak włączyć Bezpieczny układ obszaru i ograniczenie edycji.
Oto wynik powyższych zmian
Projektowanie układu z SafeArea
podczas projektowania dla iPhone X, musisz upewnić się, że układy wypełniają ekran i nie są zasłonięte przez Zaokrąglone rogi urządzenia, obudowę czujnika lub wskaźnik dostępu do ekranu głównego.
Większość aplikacji, które używają standardowych, systemowych elementów interfejsu użytkownika, takich jak paski nawigacyjne, tabele i kolekcje, automatycznie dostosowuje się do nowego formatu urządzenia. Materiały tła rozciągają się na krawędzie wyświetlacza, a elementy interfejsu są odpowiednio wstawione i pozycji.
W przypadku aplikacji z niestandardowymi układami Obsługa iPhone ' a X powinna być stosunkowo łatwa, zwłaszcza jeśli aplikacja używa układu automatycznego i przylega do przewodników bezpiecznego obszaru i układu marginesów.
Oto przykładowy kod (Ref z: Safe Area Layout Guide ) :
Jeśli tworzysz swoje ograniczenia w kodzie, użyj właściwości Safearealayoutguide UIView, aby uzyskać odpowiednie kotwice układu. Odtworzmy powyższy interfejs Przykład konstruktora w kodzie, aby zobaczyć, jak wygląda:
Zakładając, że mamy Zielony widok jako właściwość w naszym kontrolerze widoku:
private let greenView = UIView()
Możemy 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 marginesu, 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, jeśli nie celujesz tylko w iOS 11, będziesz musiał zawinąć ograniczenia przewodnika po safe area za pomocą # available i wróć do górnych i dolnych przewodników po układach 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 rozszerzeniu UIView
ułatw sobie pracę z programem 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 Apple Developer dla Safe Area Layout Przewodnik
Safe Area jest wymagane do obsługi projektowania interfejsu użytkownika dla iPhone-X. oto podstawowe wytyczne dla jak zaprojektować interfejs użytkownika dla iPhone-X przy użyciu układu Safe Area
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-05 13:08:01
Chcę wspomnieć coś, co złapało mnie po raz pierwszy, gdy próbowałem dostosować aplikację opartą na SpriteKit, aby uniknąć zaokrąglonych krawędzi i "wycięć" nowego iPhone ' a X, zgodnie z najnowszymi wytycznymi Human Interface Guidelines: Nowa Właściwość safeAreLayoutGuide
z UIView
musi zostać zapytana po widok został dodany do hierarchii (na przykład na -viewDidAppear:
) w celu zgłoszenia znaczącej ramki układu (w przeciwnym razie, po prostu zwraca Pełny rozmiar ekranu).
Z dokumentacja nieruchomości:
Przewodnik po Układzie przedstawiający część widoku, która jest niezauważone przez paski i inne treści. gdy widok jest widoczny na ekranie , ten przewodnik odzwierciedla część widoku, która nie jest pokryta paskami nawigacji, paskami kart, paski narzędzi i inne widoki przodków. (W tvOS bezpieczny obszar odzwierciedla obszar nie obejmował ramki ekranu.) Jeśli widok nie jest aktualnie zainstalowany w hierarchii widoków lub nie jest jeszcze widoczny na ekranie krawędzie prowadnicy układu są równe krawędziom widoku.
(moje)
Jeśli przeczytasz go już -viewDidLoad:
, layoutFrame
poradnika będzie {{0, 0}, {375, 812}}
zamiast oczekiwanego {{0, 44}, {375, 734}}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-29 22:52:06
- wcześniej w iOS 7.0-11.0 przestarzały>
UIKit
używa topLayoutGuide & bottomLayoutGuide czyliUIView
własność -
IOS11 + używa safeAreaLayoutGuide który jest również
UIView
właściwością Włącz pole wyboru Przewodnik po Układzie obszaru bezpiecznego w Inspektorze plików.
Bezpieczne obszary ułatwiają umieszczanie widoków w widocznej części ogólnej interfejs.
W przypadku tvOS obszar bezpieczny zawiera również wstawki overscan ekranu, które reprezentują obszar objęty ramką ekranu.
- safeAreaLayoutGuide odzwierciedla część widoku, która nie jest pokryta przez paski nawigacji, paski kart, paski narzędzi i inne widoki przodków.
Użyj bezpiecznych obszarów jako pomocy do układania treści, takich jak
UIButton
itd.Podczas projektowania dla iPhone X należy upewnić się, że układy wypełniają się ekran i nie są zasłonięte przez Zaokrąglone rogi urządzenia, obudowę czujnika lub wskaźnik dostępu do ekranu głównego.
Upewnij się, że tła rozciągają się na krawędzie wyświetlacza, a pionowo przewijane układy, takie jak tabele i kolekcje, przesuwają się aż do dołu.
Pasek stanu jest wyższy na iPhone X niż na innych iPhone ' ach. Jeśli aplikacja przyjmuje stałą wysokość paska stanu dla pozycjonowania zawartości poniżej paska stanu, musisz zaktualizuj aplikację, aby dynamicznie pozycjonowała zawartość w oparciu o urządzenie użytkownika. Pamiętaj, że pasek stanu w telefonie iPhone X nie zmienia wysokości, gdy aktywne są zadania w tle, takie jak nagrywanie głosu i śledzenie lokalizacji
print(UIApplication.shared.statusBarFrame.height)//44 for iPhone X, 20 for other iPhones
Wysokość kontenera wskaźnika domu wynosi 34 punkty.
Po włączeniu Safe Area Layout Guide {[16] } możesz zobaczyć właściwość safe area constraints wymienioną w builderze interfejsu.
Ty można ustawić ograniczenia odpowiednio self.view.safeAreaLayoutGuide
jako -
ObjC:
self.demoView.translatesAutoresizingMaskIntoConstraints = NO;
UILayoutGuide * guide = self.view.safeAreaLayoutGuide;
[self.demoView.leadingAnchor constraintEqualToAnchor:guide.leadingAnchor].active = YES;
[self.demoView.trailingAnchor constraintEqualToAnchor:guide.trailingAnchor].active = YES;
[self.demoView.topAnchor constraintEqualToAnchor:guide.topAnchor].active = YES;
[self.demoView.bottomAnchor constraintEqualToAnchor:guide.bottomAnchor].active = YES;
Swift:
demoView.translatesAutoresizingMaskIntoConstraints = false
if #available(iOS 11.0, *) {
let guide = self.view.safeAreaLayoutGuide
demoView.trailingAnchor.constraint(equalTo: guide.trailingAnchor).isActive = true
demoView.leadingAnchor.constraint(equalTo: guide.leadingAnchor).isActive = true
demoView.bottomAnchor.constraint(equalTo: guide.bottomAnchor).isActive = true
demoView.topAnchor.constraint(equalTo: guide.topAnchor).isActive = true
} else {
NSLayoutConstraint(item: demoView, attribute: .leading, relatedBy: .equal, toItem: view, attribute: .leading, multiplier: 1.0, constant: 0).isActive = true
NSLayoutConstraint(item: demoView, attribute: .trailing, relatedBy: .equal, toItem: view, attribute: .trailing, multiplier: 1.0, constant: 0).isActive = true
NSLayoutConstraint(item: demoView, attribute: .bottom, relatedBy: .equal, toItem: view, attribute: .bottom, multiplier: 1.0, constant: 0).isActive = true
NSLayoutConstraint(item: demoView, attribute: .top, relatedBy: .equal, toItem: view, attribute: .top, multiplier: 1.0, constant: 0).isActive = true
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-19 03:27:01
Apple wprowadziło topLayoutGuide i bottomLayoutGuide jako właściwości UIViewController już w iOS 7. Pozwoliły na tworzenie ograniczeń, aby twoja zawartość nie była ukrywana przez paski UIKit, takie jak pasek stanu, nawigacji lub paska kart. Te prowadnice układu są przestarzałe w systemie iOS 11 i zastąpione przez pojedynczy przewodnik po Układzie obszaru bezpiecznego.
Zobacz link Aby uzyskać więcej informacji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-17 04:58:29
Przewodnik po bezpiecznym układzie obszarów pomaga uniknąć podkadłubowych elementów interfejsu użytkownika systemu podczas pozycjonowania treści i kontrolek.
Obszar Bezpieczny to obszar pomiędzy elementami interfejsu systemu, którymi są pasek stanu, pasek nawigacji i pasek narzędzi lub pasek kart. Po dodaniu paska stanu do aplikacji obszar bezpieczny zmniejszy się. Po dodaniu paska nawigacyjnego do aplikacji obszar bezpieczny ponownie się kurczy.
W iPhone X obszar bezpieczny zapewnia dodatkowe wstawki z górnego i dolnego ekranu krawędzie w portrecie nawet wtedy, gdy nie ma paska. W krajobrazie bezpieczny obszar jest wstawiany z boków ekranów i wskaźnika domu.
Jest to zaczerpnięte z filmu Apple Projektowanie dla iPhone X gdzie również wizualizują, jak różne elementy wpływają na bezpieczny obszar.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-13 09:48:46