Подтвердить что ты не робот

Просмотр скрыт под UINavigationBar iOS 7

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

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

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

4b9b3361

Ответ 1

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

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

Новое поведение в iOS 7. Значение по умолчанию - YES. Вы можете заставить непрозрачный фона, установив для свойства значение NO. Если на панели навигации есть пользовательское фоновое изображение, значение по умолчанию выводится из альфа-значений изображения-YES, если он имеет какой-либо пиксель с альфа- 1.0 Если вы отправляете setTranslucent: ДА на панель с непрозрачным пользовательским фоновым изображением. будет применять непрозрачность системы менее 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 3:

vc.edgesForExtendedLayout = []

Ответ 2

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

self.edgesForExtendedLayout = UIRectEdgeNone;

Ответ 3

Swift 3 +:

self.edgesForExtendedLayout = []

Ответ 4

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

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

Setting Top Bar style

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

Ответ 5

Точка № 7 в этом списке делает трюк. Вам все равно придется обернуть его в iOS 7, проверяя код как @null answer:

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

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

Ответ 6

Найдите этот ключ: UIViewControllerBasedStatusBarAppearance.

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

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

Это позволит вам контролировать появление строки состояния. Там куча изменений API для баров статуса, идите посмотреть в документации для новых UIViewController методов, таких как

- (void)prefersStatusBarHidden;

Ответ 7

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

self.edgesForExtendedLayout = .None

Ответ 8

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

self.edgesForExtendedLayout = []

Цель C

self.edgesForExtendedLayout = UIRectEdgeNone;

Ответ 9

Для меня лучшим способом для прозрачного 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()