[UIApplication sharedApplication].statusBarFrame.size.height
. Ale ponieważ wszystkie rozmiary są wyrażone w punktach, a nie w pikselach, wysokość paska stanu zawsze wynosi 20.
Aktualizacja. Widząc, że ta odpowiedź jest uważana za pomocną, powinienem ją rozwinąć.
Wysokość paska stanu jest rzeczywiście równa 20,0 f punktów, z wyjątkiem następujących przypadków:
- pasek stanu został ukryty
setStatusBarHidden:withAnimation:
metodą, a jego wysokość wynosi 0,0 punktu;
- jak wskazano tutaj @Anton, podczas połączenia przychodzącego poza aplikacją Telefon lub podczas sesji nagrywania dźwięku wysokość paska stanu sesji wynosi 40,0 punktów.
Jest też przypadek paska stanu wpływającego na wysokość twojego widoku. Zwykle wysokość widoku jest równa wymiarowi ekranu dla danej orientacji minus wysokość paska stanu. Jeśli jednak animujesz pasek stanu (pokaż lub ukryj go) po wyświetleniu widoku, pasek stanu zmieni ramkę, ale widok nie , będziesz musiał ręcznie zmienić rozmiar widoku po animacji paska stanu (lub podczas animacji, ponieważ wysokość paska stanu ustawia się na wartość końcową na początku animacji).
Aktualizacja 2. Istnieje również przypadek orientacji interfejsu użytkownika. Pasek stanu nie respektuje wartości orientacji, dlatego wartość wysokości paska stanu dla trybu portretowego to [UIApplication sharedApplication].statusBarFrame.size.height
(tak, domyślna orientacja to zawsze portret, bez względu na to, co mówi twoja aplikacja info.plist), dla krajobrazu - [UIApplication sharedApplication].statusBarFrame.size.width
. Aby określić bieżącą orientację interfejsu użytkownika, gdy jest on niedostępny UIViewController
i self.interfaceOrientation
nie jest dostępny, użyj [UIApplication sharedApplication].statusBarOrientation
.
Aktualizacja dla iOS7. Mimo zmiany stylu wizualnego paska stanu, nadal tam jest, jego ramka nadal zachowuje się tak samo. Jedyny ciekawy znalezisko o pasku mam - udział w I: Twój UINavigationBar
„s kafelki tła również zostaną wyłożone na pasku stanu, dzięki czemu można osiągnąć ciekawe efekty projektu lub po prostu kolor paska stanu. To również nie wpłynie w żaden sposób na wysokość paska stanu.
Idź z sugestią Martina do pytania: Uzyskaj wysokość paska stanu iPhone'a .
I w Swift
To wygląda na włamanie, ale w rzeczywistości jest całkiem solidne. W każdym razie jest to jedyne działające rozwiązanie.
Stara odpowiedź
Poniższy kod, który wchodzi w twoją niestandardową podklasę
UIViewController
, prawie działał, by obsługiwać krajobraz. Ale zauważyłem skrzynkę narożną (podczas obracania z prawej> nieobsługiwany do góry nogami> z lewej), dla której nie działała (przełączona wysokość i szerokość).źródło
statusBarFrame
Jest zwracany jako wartość przed transformacji.var statusBarHeight: CGFloat
Spróbuj tego:
źródło
Swift 3 lub Swift 4:
źródło
Chociaż pasek stanu ma zwykle 20 punktów wysokości, w niektórych sytuacjach może być dwa razy większy:
Po prostu spróbuj, a zobaczysz sam. Twarde kodowanie wysokości do 20 punktów będzie zwykle działać, dopóki nie zadziała.
Popieram więc odpowiedź H2CO3:
źródło
EDIT IOS 11 sposób wypracować gdzie umieścić górną część zawartości widzenia jest UIView za
safeAreaLayoutGuide
See UIView Dokumentacja .ODPOWIEDZIALNA ODPOWIEDŹ Jeśli celujesz w iOS 7+, dokumentacja dla UIViewController informuje, że
topLayoutGuide
właściwość viewController podaje dolną część paska stanu lub dolną część paska nawigacji, jeśli jest również widoczna. To może się przydać i na pewno jest mniej hackujące niż wiele poprzednich rozwiązań.źródło
Nie zapominaj, że ramka paska stanu będzie w polu współrzędnych ekranu! Jeśli uruchomisz w trybie poziomym, może się okazać, że szerokość i wysokość zostaną zamienione. Zdecydowanie zalecamy użycie tej wersji kodu zamiast tego, jeśli obsługuje się orientację poziomą:
Następnie możesz bezpośrednio odczytać właściwość height statusBarFrame. „Widok” w tym przypadku powinien być widokiem, w którym chcesz skorzystać z pomiarów, najprawdopodobniej kontrolera widoku głównego okna aplikacji.
Nawiasem mówiąc, pasek stanu może nie tylko być wyższy podczas połączeń telefonicznych, ale może również wynosić zero, jeśli pasek stanu został celowo ukryty.
źródło
Oto szybki sposób uzyskania wysokości paska stanu ekranu:
Są one uwzględnione jako standardowa funkcja w moim projekcie: https://github.com/goktugyil/EZSwiftExtensions
źródło
W systemie iOS 13 możesz użyć:
źródło
źródło
Domyślnie wysokość paska stanu w iOS to
20 pt
.Więcej informacji: http://www.idev101.com/code/User_Interface/sizes.html
źródło
Właśnie znalazłem sposób, który pozwala ci nie uzyskiwać bezpośredniego dostępu do wysokości paska stanu, ale ją obliczyć.
Wysokość paska nawigacyjnego - topLayoutGuide length = wysokość paska stanu
Szybki:
self.topLayoutGuide.length
to górny obszar objęty półprzezroczystym paskiem iself.navigationController?.navigationBar.frame.height
jest to półprzezroczysty pasek bez paska stanu, który zwykle wynosi 44pkt. Korzystając z tej metody, można łatwo obliczyć wysokość paska stanu bez obawy o zmianę wysokości paska stanu z powodu połączeń telefonicznych.źródło
self.topLayoutGuide.length
wynosi 0, więc wynik kończy się na -44.Szybki 5
UIApplication.shared.statusBarFrame.height
źródło
Za pomocą następującego kodu jednowierszowego można uzyskać wysokość paska stanu w dowolnej orientacji, a także, jeśli jest widoczna, czy nie
To proste, ale bardzo przydatne makro, po prostu spróbuj tego, nie musisz pisać żadnego dodatkowego kodu
źródło