Potrzebuję zmienić rozmiar niektórych elementów w stosunku do wysokości paska stanu iPhone'a. Wiem, że pasek stanu ma zwykle 20 punktów, ale nie jest tak, gdy jest w trybie tetheringu. Zostaje podwojona do 40. Jaki jest właściwy sposób określenia wysokości? Próbowałem już uzyskać pewność, ale daje mi 20 x 480 w krajobrazie, który jest poprawny, ale daje mi to 320 x 40 w pionie. Dlaczego nie daje mi czegoś przeciwnego (40 x 320)?Uzyskaj wysokość paska stanu iPhone'a
Odpowiedz
StatusBarFrame zwraca ramkę we współrzędnych ekranu. Wierzę, że poprawny sposób, aby uzyskać to, co odpowiada w koordynuje widok jest wykonanie następujących czynności:
- (CGRect)statusBarFrameViewRect:(UIView*)view
{
CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame];
CGRect statusBarWindowRect = [view.window convertRect:statusBarFrame fromWindow: nil];
CGRect statusBarViewRect = [view convertRect:statusBarWindowRect fromView: nil];
return statusBarViewRect;
}
Teraz w większości przypadków okno wykorzystuje te same współrzędne jak ekran, więc [UIWindow convertRect:fromWindow:]
niczego nie zmienia, ale w przypadku, gdyby były inne, ta metoda powinna postąpić właściwie.
Wywołanie tej metody w '- [UIViewController viewWillAppear:]' nie działa. Dwie kwestie: 1. Okno widoku ma wówczas postać 'nil'. 2. Nawet gdy poprzedzałem wywołanie '- [UIWindow convertRect: fromWindow:]' z 'if (view.window)', kiedy wróciłem do kontrolera widoku w trybie poziomym, statusBarFrame miał zmienioną szerokość i wysokość, a wywołanie '- [UIView convertRect: fromView:]' nie przełączyło ich poprawnie. – ma11hew28
@MattDiPasquale Dlaczego nie nazwać go w 'viewDidAppear:' zamiast? – ThomasW
Ponieważ dostosowuję 'self.collectionView.contentInset' na podstawie' [UIApplication sharedApplication] .statusBarFrame'. Jeśli dostosuję go po wyświetleniu widoku, zobaczysz, jak skacze. Muszę to zmienić, zanim pojawi się widok. – ma11hew28
zrobiłaś to tak:
CGRect rect;
rect = [[UIApplication sharedApplication] statusBarFrame];
NSLog(@"Statusbar frame: %1.0f, %1.0f, %1.0f, %1.0f", rect.origin.x, rect.origin.y, rect.size.width, rect.size.height);
Można sprawdzić, które jest mniejszą z dwóch wartości, które będą prawdziwą wysokość.
Dzięki! [Zaimplementowałem ten pomysł] (http://stackoverflow.com/a/16598350/242933). Wspaniale! – ma11hew28
Ta metoda służy do orientacji pionowej w orientacji pionowej.
-(float) statusBarHeight
{
CGSize statusBarSize = [[UIApplication sharedApplication] statusBarFrame].size;
return MIN(statusBarSize.width, statusBarSize.height);
}
// example call
float statusBarHeight = [self statusBarHeight];
Czy mógłbyś podać więcej szczegółów na temat swojego rozwiązania, dzięki! –
Można tego użyć w implementacji ViewController. Na przykład w metodzie "viewDidLoad". –
EDIT IOS 11 sposób wypracować gdzie umieścić górną część zawartości widzenia jest UIView na safeAreaLayoutGuide
Zobacz UIView Documentation.
ODRADZANE ODPOWIEDŹ Jeśli kierujesz iOS 7+, Dokumentacja UIViewController przypomina, że topLayoutGuide
własność viewController daje Ci dno pasku stanu lub dno pasku nawigacyjnym, jeśli jest to również widoczne. To może być użyteczne i jest z pewnością mniej hackowe niż wiele wcześniejszych rozwiązań.
Oto wersja Swift jeśli ktoś go potrzebuje:
var screenStatusBarHeight: CGFloat {
return UIApplication.sharedApplication().statusBarFrame.height
}
ten jest dołączony jako standardowy zmiennej:
https://github.com/goktugyil/EZSwiftExtensions
Uwaga: Jego mój repo
Swift 2:
let statusBarHeight = UIApplication.sharedApplication().statusBarFrame.height
Swift Swift 3 lub 4:
let statusBarHeight = UIApplication.shared.statusBarFrame.height
Wskazówka: Nie zapomnij wstrzyknąć UIApplication.shared
nie wystarczy użyć singleton w kodzie.
Dlaczego nie chciałbym używać singletonu? –
- 1. Wysokość ekranu bez paska stanu, paska akcji i zakładek
- 2. Dokumentacja paska stanu Emacsa
- 3. Ukrywanie/pokazywanie paska stanu
- 4. Uzyskaj wysokość obiektu TextView
- 5. JavaScript - Uzyskaj wysokość przeglądarki
- 6. Uzyskaj wysokość znacznika div
- 7. ReactJS - Uzyskaj wysokość elementu
- 8. Sterowanie ikoną paska stanu Android
- 9. Android: efekt skoku paska stanu
- 10. Kolor ikony odwróconej paska stanu
- 11. Android - standardowa wysokość paska narzędzi
- 12. Uzyskaj pełną wysokość obciętego DIV
- 13. iOS - Uzyskaj "prawdziwą" wysokość litery
- 14. Nie zmieniaj rozmiaru paska nawigacyjnego podczas ukrywania paska stanu.
- 15. brak paska stanu w luce telefonicznej?
- 16. Zmiana rozmiaru paska stanu podczas połączenia?
- 17. Stała z iOS: Kolor paska stanu
- 18. Visual Studio 2008 - Słownik ikon paska stanu?
- 19. Jak zmienić kolor tła paska stanu Android
- 20. Potrzebujesz w pełni przezroczystego paska stanu
- 21. Aplikacja paska stanu OSX przy użyciu Swift
- 22. iOS 7 - dostosowywanie do paska stanu
- 23. Jaka jest wysokość paska narzędzi Android?
- 24. Jak uzyskać wysokość tytułu paska tytułu WinForm?
- 25. Jak zmniejszyć wysokość paska w Bootstrap 3?
- 26. Wysokość ciała 100% wyświetlanie pionowego paska przewijania
- 27. Jak określić wysokość paska narzędzi w UINavigationController?
- 28. Android: Jak zmienić wysokość paska ProgressBar?
- 29. Wysokość paska nawigacyjnego Twitter-Bootstrap za mała
- 30. Uzyskaj wzrost wysokości sztaby
W jaki sposób pasek stanu może mieć rozmiar 40 pikseli? – Andy
@Andy, gdy aktywne jest tethering, wysokość paska stanu zwiększa się do 40px –
Lub gdy przychodzi połączenie – SwiftMatt