[UIApplication sharedApplication].statusBarFrame.size.height
, Но поскольку все размеры указаны в точках, а не в пикселях, высота строки состояния всегда равна 20.
Обновить. Видя, что этот ответ считается полезным, я должен уточнить.
Высота строки состояния действительно равна 20.0f баллов за исключением следующих случаев:
- строка состояния скрыта
setStatusBarHidden:withAnimation:
методом, а ее высота равна 0,0f балла;
- как указывал @Anton, во время входящего звонка вне приложения Phone или во время записи звука высота строки состояния сеанса равна 40.0f баллов.
Есть также случай строки состояния, влияющей на высоту вашего обзора. Обычно высота представления равна размеру экрана для данной ориентации минус высота строки состояния. Однако, если вы анимируете строку состояния (показываете или скрываете ее) после того, как представление было показано, строка состояния изменит свой кадр, но представление не изменится , вам придется вручную изменять размер представления после анимации строки состояния (или во время анимации, так как высота строки состояния устанавливается на конечное значение в начале анимации).
Обновление 2. Есть также случай ориентации пользовательского интерфейса. Строка состояния не учитывает значение ориентации, поэтому значение высоты строки состояния для портретного режима [UIApplication sharedApplication].statusBarFrame.size.height
(да, ориентация по умолчанию всегда портретная, независимо от того, что говорит ваш info.plist вашего приложения), для альбомной - [UIApplication sharedApplication].statusBarFrame.size.width
. Чтобы определить текущую ориентацию пользовательского интерфейса, когда он находится за пределами UIViewController
и self.interfaceOrientation
недоступен, используйте [UIApplication sharedApplication].statusBarOrientation
.
Обновление для iOS7. Несмотря на то, что визуальный стиль строки состояния изменился, он все еще там, его рамка все еще ведет себя так же. Единственная интересная находка о строке состояния я - часть I: ваш UINavigationBar
«ы плиточного фон также будет кафельная строка состояния, так что вы можете достичь некоторых интересных дизайнерских эффектов , или просто цвета вашей строки состояния. Это также никак не повлияет на высоту строки состояния.
Идите с предложением Мартина к вопросу: Получите высоту строки состояния iPhone .
И в Свифте
Это похоже на взлом, но на самом деле это довольно солидно. Во всяком случае, это единственное рабочее решение.
Старый ответ
Следующий код, который входит в ваш пользовательский подкласс
UIViewController
, почти работал для поддержки ландшафта. Но я заметил угловой случай (при повороте справа> не поддерживается вверх ногами> слева), для которого он не работал (переключил высоту и ширину).источник
statusBarFrame
Возвращается в качестве значения перед преобразованием.var statusBarHeight: CGFloat
Попробуй это:
источник
Свифт 3 или Свифт 4:
источник
Хотя строка состояния обычно имеет высоту 20pt, в некоторых ситуациях она может быть вдвое больше:
Просто попробуйте, и вы сами убедитесь. Жесткое кодирование высоты до 20pt обычно будет работать, пока не сработает.
Итак, я второй ответ H2CO3:
источник
РЕДАКТИРОВАТЬ iOS 11 способ определить, где разместить верхнюю часть содержимого вашего просмотра, -
safeAreaLayoutGuide
см. Документацию UIView в разделе UIView .УСТАРЕВШИЙ ОТВЕТ Если вы ориентируетесь на iOS 7+, в документации для UIViewController указано, что
topLayoutGuide
свойство viewController дает вам нижнюю часть строки состояния или нижнюю часть панели навигации, если она также видна. Это может быть полезно, и, конечно, менее взломать, чем многие из предыдущих решений.источник
Не забывайте, что рамка строки состояния будет в координатном пространстве экрана! Если вы запускаете в ландшафтном режиме, вы можете обнаружить, что ширина и высота меняются местами. Я настоятельно рекомендую вам использовать эту версию кода, если вы поддерживаете альбомную ориентацию:
После этого вы можете напрямую прочитать свойство высоты statusBarFrame. «Представление» в этом случае должно быть представлением, в котором вы хотите использовать измерения, скорее всего, корневым контроллером окна приложения.
Кстати, строка состояния может быть не только выше во время телефонных звонков, но также может быть нулевой, если строка состояния была намеренно скрыта.
источник
Для iOS 13 вы можете использовать:
источник
Вот быстрый способ получить высоту строки состояния экрана:
Они включены в качестве стандартной функции в моем проекте: https://github.com/goktugyil/EZSwiftExtensions
источник
источник
По умолчанию высота строки состояния в iOS равна
20 pt
.Дополнительная информация: http://www.idev101.com/code/User_Interface/sizes.html.
источник
Я только что нашел способ, позволяющий вам не напрямую получать доступ к высоте строки состояния, а вычислять ее.
Высота панели навигации - topLayoutGuide length = высота строки состояния
Swift:
self.topLayoutGuide.length
является верхней областью, которая покрыта полупрозрачной полосой, иself.navigationController?.navigationBar.frame.height
является полупрозрачной полосой, исключая строку состояния, которая обычно составляет 44 пт. Таким образом, используя этот метод, вы можете легко рассчитать высоту строки состояния, не беспокоясь об изменении высоты строки состояния из-за телефонных звонков.источник
self.topLayoutGuide.length
равно 0, поэтому в итоге получается -44.Swift 5
UIApplication.shared.statusBarFrame.height
источник
Используя следующий однострочный код, вы можете получить высоту строки состояния в любой ориентации, а также, если она видна или нет
Это простой, но очень полезный макрос, попробуйте, вам не нужно писать лишний код
источник