2017-09-14 53 views
7

Domyślnie pasek stanu na iPhone X wygląda następująco:Jak pojawia się czarny pasek stanu na iPhone X na iOS 11

enter image description here

Ale chciałbym aby to osiągnąć:

enter image description here

Próbowałem ustawić preferredStatusBarStyle na lightContent, ale zadziałało to tylko po ustawieniu tła za pasku stanu na czarny.

Aby naprawić zaokrąglone rogi, doszedłem do dodania kolejnego wydziału z zaokrąglonymi narożnikami.

class ViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     view.backgroundColor = .black 

     let roundedView = UIView(
      frame: CGRect(
       x: 0, 
       y: UIApplication.shared.statusBarFrame.height, 
       width: view.frame.width, 
       height: view.frame.height 
      ) 
     ) 
     roundedView.layer.cornerRadius = 10 
     roundedView.layer.masksToBounds = true 
     roundedView.backgroundColor = .white 
     view.addSubview(roundedView) 

     let label = UILabel(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: 60)) 
     label.text = "Black statusbar!" 
     label.textAlignment = .center 
     roundedView.addSubview(label) 
    } 

    override var preferredStatusBarStyle: UIStatusBarStyle { 
     return .lightContent 
    } 
} 

Zastanawiam się, czy to jest najlepsze podejście .. musi być lepszy sposób, aby to osiągnąć.


UPDATE

To straszny pomysł, ponieważ:

Nie mama sk lub zwróć szczególną uwagę na kluczowe funkcje wyświetlania. Nie należy próbować ukrywać zaokrąglonych rogów urządzenia, obudowy czujnika ani wskaźnika w celu uzyskania dostępu do ekranu głównego przez umieszczenie czarnych pasów na górze i dole ekranu . Nie należy używać ozdób wizualnych, takich jak zamki, ramki, kształty lub teksty instruktażowe, aby zwrócić szczególną uwagę na te obszary.

  • Zaokrąglone rogi w górnej części widoku może wyglądać dobrze, ale trzeba będzie dodać wyjątków w kodzie, aby upewnić się, że zaokrąglone narożniki nie są pokazane na innych iPhone'ów. Będziesz musiał umieścić to we wszystkich twoich ViewControllers/Storyboards. To nie jest takie wspaniałe.

  • Zaokrąglone rogi u dołu widoku będą wyświetlane bezpośrednio na zrzutach ekranu, ale narożniki u góry (ustawione ręcznie) nie będą widoczne. To będzie brzydkie, gdy użytkownicy będą udostępniać Twoją aplikację.

+1

obszar Bezpieczne powoduje mnóstwo kłopotów już z wstecznej kompatybilności, jest to po prostu będzie paliwo w ogień. – Annjawn

Odpowiedz

10

Układ bezpiecznego obszaru to rozwiązanie Twojego problemu.

Próbowałem podążać za rozwiązaniem w moich istniejących projektach i działa dobrze.

  • Ustaw czarny kolor tła (lub jakikolwiek chcesz) do głównego widoku kontrolera widoku.
  • Teraz dodaj widok podrzędny (z białym tłem) i ustaw jego ograniczenia względem Układu bezpiecznego obszaru (lub postępuj zgodnie z przewodnikiem układu górnego i dolnego, jeśli wersja Xcode jest poniżej 9).
  • Rozważ ten widok podrzędny (z białym tłem) jako główny widok i za jego pomocą przetestuj dalszy projekt.

Oto przykładowa migawka z wynikiem, Włączając lub wyłączając układ bezpiecznego obszaru, przetestowałem i zaimplementowałem.

FYI: W tych migawkach główny widok ma czerwone tło, a widok podrzędny ma niebieskie tło.

Safe Area Układ: enter image description here

autoLayout

enter image description here

+0

Dzięki! Zaktualizowałem moje pytanie, może to wcale nie jest taki dobry pomysł. Ale aby kontynuować ćwiczenie: jest to nieco lepsze niż wykonanie go za pomocą kodu, ale nadal będzie trzeba to powtarzać dla każdego kontrolera widoku .. czy nie idealnie? – Tieme

+0

Utworzono klasę interfejsu widoku niestandardowego IBDezignable i użyłem tego samego. Ty i twoje podejście mają absolutną rację, że może to wymagać ręcznej praktyki dla każdego kontrolera widoku. Ale nie będzie bardzo trudno zrobić to ręcznie. A także, ten pomysł może mieć kontrolę nad obszarami interfejsu poza granicami jabłek w ramach jego wytycznych. Na tym etapie, dopóki nie znajdziemy rozwiązania stałego, może to być dobre. Miłego dnia :) – Krunal