Какова высота панели навигации в iOS 7?

Я создал простое приложение iOS 7 с использованием шаблона основных данных по умолчанию.

В методе MasterViewController.m, viewDidAppear я записал для

self.navigationController.navigationBar.frame.size.height
self.navigationController.navigationBar.frame.origin.y

и получили соответственно 44 и 20. Это кажется странным, потому что из того, что я читал, панель навигации в iOS 7 должна быть 64-точечной высоты и начинаться с 0-й точки, чтобы она находилась под строкой состояния. То, что я прочитал,

1) Руководство по переходу на iOS 7 UI

Поскольку строка состояния прозрачна, просмотр позади нее показывает через

2) Использование фонового изображения в панели навигации

Если ваше приложение использует пользовательский образ в качестве фона панели, youll необходимо обеспечить "более высокое" изображение, чтобы оно расширялось за статус бар. Высота навигационной панели изменяется с 44 точек (88 пикселей) до 64 точек (128 пикселей).

Ответ 1

Я получил этот ответ из книги "Программирование iOS 7, раздел" Положение бара и показатели бара "

Если панель навигации или панель инструментов - или панель поиска (обсуждается ранее в эта глава) - занять верхнюю часть экрана, iOS 7 что его высота должна быть увеличена, чтобы прозрачная строка состояния. Чтобы сделать это возможным, iOS 7 представляет понятие позиции в баре.

UIBarPositionTopAttached

Указывает, что панель находится в верхней части экрана, а также ее содержащий вид. Бары с этой позицией рисуют свой фон расширенные вверх, позволяя их фоновое содержание показывать через строка состояния. Доступно в iOS 7.0 и более поздних версиях.

Ответ 2

Существует разница между навигационной панелью и строкой состояния. Запутанная часть состоит в том, что она выглядит как одна сплошная функция в верхней части экрана, но области можно фактически разделить на два разных вида; панель состояния и панель навигации. Строка состояния охватывает от y = 0 до y = 20 точек, а панель навигации охватывает от y = 20 до y = 64 точки. Таким образом, панель навигации (в которой находится заголовок страницы и кнопки навигации) имеет высоту 44 точки, но строка состояния и панель навигации вместе имеют общую высоту 64 точки.

Вот отличный ресурс, который решает этот вопрос, а также ряд других отличительных особенностей iOS7: http://ivomynttinen.com/blog/the-ios-7-design-cheat-sheet/

Ответ 3

Высота состояния может варьироваться. Обычно это 20 пикселей. Однако на iPhone, когда есть телефонный звонок, тогда он составляет 40 пикселей.

extension UIViewController {
    /// Returns 64 when normal
    ///
    /// Only on iPhone: Returns 84 when In-Call status bar is visible
    var topBarHeight: CGFloat {
        let statusBarHeight = UIApplication.shared.statusBarFrame.height
        let navigationBarHeight = self.navigationController?.navigationBar.frame.height ?? 0
        return statusBarHeight + navigationBarHeight
    }
}