Получить iPhone высота строки состояния
Мне нужно изменить размер некоторых элементов по отношению к высоте строки состояния iPhone. Я знаю, что строка состояния обычно составляет 20 баллов, но это не тот случай, когда она находится в режиме привязки. Он удваивается до 40. Как правильно определить, чтобы определить его высоту? Я пробовал
[[UIApplication sharedApplication] statusBarFrame]
но это дает мне 20 х 480 в ландшафте, который является правильным, но затем он дает мне 320 х 40 в портрете. Почему это не дает мне противоположное (40 х 320)?
7 ответов:
строка состояния возвращает кадр в экранных координатах. Я считаю, что правильный способ получить то, что это соответствует координатам вида, - это сделать следующее:
- (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; }
теперь в большинстве случаев окно использует те же координаты, что и экран, поэтому
[UIWindow convertRect:fromWindow:]
ничего не меняет, но в случае, что они могут быть разными, этот метод должен делать правильные вещи.
вы сделали это так:
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);
этот метод работает для портретной и альбомной ориентации.
-(float) statusBarHeight { CGSize statusBarSize = [[UIApplication sharedApplication] statusBarFrame].size; return MIN(statusBarSize.width, statusBarSize.height); } // example call float statusBarHeight = [self statusBarHeight];
EDIT IOS 11 способ решить, где разместить верхнюю часть вашего контента просмотра-это UIView
safeAreaLayoutGuide
посмотреть UIView Documentation.УСТАРЕВШИЙ ОТВЕТ Если вы ориентируетесь на iOS 7+, документация для UIViewController сообщает, что viewController
topLayoutGuide
свойство дает вам нижнюю часть строки состояния или нижней части панели навигации, если она также видна. Это может быть полезно, и, конечно, меньше взломать, чем многие из предыдущее решение.
Swift 2:
let statusBarHeight = UIApplication.sharedApplication().statusBarFrame.height
Swift 3 или Swift 4:
let statusBarHeight = UIApplication.shared.statusBarFrame.height
Совет: Не забудьте ввести
UIApplication.shared
не просто использовать синглтон в коде.
вот версия Swift, если кому-то это нужно:
var screenStatusBarHeight: CGFloat { return UIApplication.sharedApplication().statusBarFrame.height }
это включено в качестве стандартной переменной в:
https://github.com/goktugyil/EZSwiftExtensions
отказ от ответственности: это мой РЕПО