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ę?

Tutaj wpisz opis obrazka

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.

Author: Krunal, 2017-06-12

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.

Tutaj wpisz opis obrazka


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: Tutaj wpisz opis obrazka

AutoLayout

Tutaj wpisz opis obrazka


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.

Tutaj wpisz opis obrazka

Oto wynik powyższych zmian

Tutaj wpisz opis obrazka


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.

Tutaj wpisz opis obrazka

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.

Tutaj wpisz opis obrazka

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.

Tutaj wpisz opis obrazka


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:

Tutaj wpisz opis obrazka


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

 197
Author: Krunal,
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}}

 17
Author: Nicolas Miari,
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

Tutaj wpisz opis obrazka

  • wcześniej w iOS 7.0-11.0 przestarzały> UIKit używa topLayoutGuide & bottomLayoutGuide czyli UIView 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.

Tutaj wpisz opis obrazka

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
        }

Tutaj wpisz opis obrazka

Tutaj wpisz opis obrazka

Tutaj wpisz opis obrazka

 14
Author: Jack,
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.

 7
Author: Kemo,
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.

 4
Author: Yannick,
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