it-swarm.com.ru

Вид спрятан под UINavigationBar iOS 7

Ранее я использовал iOS 6.1 для своего проекта. Недавно я перешел на iOS 7. Поскольку, я знал много изменений, я обновил свой код ... Но я наблюдал странное поведение. Мой вид на каждом экране скрывается под панелью навигации. Перестановка представления решает проблему для iOS7, но создает проблемы для более старых версий iOS.

Может кто-нибудь объяснить мне, в чем причина и почему это происходит ?? Что изменилось в iOS 7, что вызывает эту проблему?

Любая помощь будет оценена ..

60
Salman Zaidi

Попробуйте navigationBar.translucent = NO;, это YES по умолчанию в iOS7.

Также полезно взглянуть на эту часть документации UINavigationBar:

Новое поведение на iOS 7. По умолчанию YES. Вы можете настроить непрозрачный фон, установив для свойства значение NO. Если у панели навигации есть пользовательское фоновое изображение, значение по умолчанию выводится из альфа-значений изображения - ДА, если у него есть какой-либо пиксель с альфа <1.0. Если вы отправите setTranslucent: YES на панель с непрозрачным пользовательским фоновым изображением, к которому будет применяться непрозрачность системы менее 1,0 для изображения. Если вы отправите setTranslucent: NO на панель с полупрозрачным настраиваемым фоновым изображением, он предоставит непрозрачный фон для изображения, используя бар barTintColor, если он определен, или черный для UIBarStyleBlack или белый для UIBarStyleDefault, если barTintColor равен нулю.

Edit:

Значение "navigationBar.translucent" вызывает исключение, если вы запускаете проект на устройствах/симуляторах, имеющих более старые версии iOS.

Таким образом, вы можете добавить проверку версии следующим образом:

float systemVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
if (systemVersion >= 7.0)
{
    navigationBar.translucent = NO;
}

Другим вариантом будет установить:

vc.edgesForExtendedLayout = UIRectEdgeNone;

Swift:

vc.edgesForExtendedLayout = []
123
null

Вы можете остановить свои представления, проходящие под панелью навигации, в вашем viewController:

self.edgesForExtendedLayout = UIRectEdgeNone;
44
Daniel Broad

Swift 3+:

self.edgesForExtendedLayout = []
21
David Seek

Если вам не нужна полупрозрачная панель навигации в вашем приложении, вы можете исправить это на iOS7 и iOS6 без изменения кода.

В раскадровке выберите свой контроллер навигации и затем откройте "Инспектор атрибутов". Затем в разделе "Симулированные метрики" установите для параметра "Верхняя панель" некоторое значение, но не "полупрозрачный":

Setting Top Bar style

Теперь ваши взгляды на iOS6 и iOS7 будут иметь то же положение, что и раньше.

11
gladimdim

Пункт № 7 на этот список делает свое дело. Вам все еще нужно обернуть его в код проверки iOS 7, как ответ @ null:

float systemVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
if (systemVersion >= 7.0) {
    viewController.edgesForExtendedLayout = UIRectEdgeNone;
}

Вся статья полезна для тех, кто переходит на iOS 7.

9
Lawrence Kesteloot

Используйте это свойство для своего VC, чтобы избежать совпадения строки состояния с вашим VC Swift:

self.edgesForExtendedLayout = []

Цель С

self.edgesForExtendedLayout = UIRectEdgeNone;
5
Aks

Посмотрите этот ключ: UIViewControllerBasedStatusBarAppearance.

Он используется в файле информации PLIST вашего приложения и будет выглядеть так:

Просмотр внешнего вида строки состояния на основе контроллера

Это позволит вам контролировать внешний вид строки состояния. Существует несколько изменений API для строк состояния, посмотрите в документации на новые методы UIViewController, такие как

- (void)prefersStatusBarHidden;

3
Guy Kogus

В Swift 2.2 используйте

self.edgesForExtendedLayout = .None
2
matthew

Для меня лучший способ для прозрачного Navigation Bar состоит в том, чтобы изменить shadowImage и backgroundImage панели.

navigationController?.navigationBar.isTranslucent = true
navigationController?.navigationBar.backgroundColor = nil
navigationController?.navigationBar.setBackgroundImage(UIImage(named: "navBarBackground")?.resizableImage(withCapInsets: .zero, resizingMode: .stretch), for: .default)  
navigationController?.navigationBar.shadowImage = UIImage()
0
saltwat5r