У меня ViewController
есть внутри UINavigationcontroller
, но панель навигации скрыта. Когда я запускаю приложение на iOS 7, строка состояния отображается поверх моего представления. Есть ли способ избежать этого?
Я не хочу писать код для конкретной ОС.
Я попытался установить View controller-based status bar appearance
значение NO
, но это не помогло.
Ответы:
Xcode 5
iOS 6/7 Deltas
специально создан для решения этой проблемы. В раскадровке я переместил свои представления на 20 пикселей вниз, чтобы они выглядели прямо на iOS 7, и, чтобы сделать его совместимым с iOS 6, я изменилDelta y
на -20.Поскольку моя раскадровка не использует автоматическую компоновку, для правильного изменения высоты представлений в iOS 6 мне пришлось установить
Delta height
такжеDelta Y
.источник
Если вам просто НЕ нужна строка состояния, вам нужно обновить свой список следующими данными: Для этого в список добавьте эти 2 параметра:
Ожидается, что в iOS 7 вы создадите свое приложение с учетом наложенной прозрачной строки состояния. См., Например, новое приложение «Погода» для iOS 7.
источник
Это поведение по умолчанию для
UIViewController
iOS 7. Представление будет полноэкранным, что означает, что строка состояния будет закрывать верхнюю часть вашего представления.Если у вас есть
UIViewController
внутри aUINavigationController
и отображается навигационная панель, у вас может быть следующий код в вашемviewDidLoad
или фоновое изображение для navigationBar.Если у вас скрыта панель навигации, вам необходимо настроить все элементы UIView, сдвинув 20 точек. Другого решения не вижу. Немного поможет использование автоматической раскладки.
Вот пример кода для определения версии iOS, если вы хотите обеспечить обратную совместимость.
источник
if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
Единственное рабочее решение, которое я сделал сам.
Вот мой подкласс UIViewController https://github.com/comonitos/ios7_overlaping
1 подкласс от UIViewController
2 Создайте подкласс вашего window.rootViewController от этого класса.
3 Вуаля!
4 Добавьте это, чтобы ваша строка состояния стала белой Сразу после [self.window makeKeyAndVisible]; !!!
источник
Добавить ключ в список --- Просмотр появления строки состояния на основе контроллера: НЕТ
источник
Чтобы скрыть строку состояния в ios7, выполните следующие простые шаги:
В Xcode
Resources
перейдите в папку " " и откройте "(app name)-Info.plist file
".View controller based status bar appearance
" ключ и установите его значение "NO
"Status bar is initially hidden
" ключ и установите его значение "YES
"Если ключей нет, вы можете добавить его, выбрав «
information property list
» вверху и щелкнув значок +источник
Если вы хотите полностью скрыть это и просто не иметь с ним дела, это хорошо работает.
ссылка https://stackoverflow.com/a/18873777/1030449
источник
При использовании
xib
s очень простой реализацией является инкапсуляция всех подпредставлений внутри представления контейнера с помощью флагов изменения размера (которые вы уже будете использовать для совместимости с 3,5 и 4 дюймами), чтобы иерархия представлений выглядела примерно така затем
viewDidLoad
сделайте что-то вроде этого:Таким образом, нет необходимости изменять наконечники для совместимости с iOS 7. Если у вас есть фон, его можно оставить снаружи
containerView
и позволить ему покрыть весь экран.источник
Это все, что нужно для удаления строки состояния.
источник
Для панели навигации:
Написание этого кода:
только что помогло мне.
источник
Ответ Винсента EdgeForExtendedLayout работал у меня.
Эти макросы помогают определить версию ОС, облегчая задачу
добавьте эти макросы в файл prefix.pch вашего проекта, и они будут доступны где угодно
источник
Я отправил свой ответ на другой пост с тем же вопросом, что и этот.
Из Руководства по переходу на Apple iOS7, https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/TransitionGuide/AppearanceCustomization.html#//apple_ref/doc/uid/TP40013174-CH15-SW1
В частности,
automaticallyAdjustsScrollViewInsets=YES
иset self.edgesForExtendedLayout = UIRectEdgeNone
работает для меня, когда я не хочу дублирования и у меня есть файлtableviewcontroller
.источник
Если вы хотите, чтобы любой ценой был включен параметр «Использовать автоматическое размещение», поместите следующий код в viewdidload.
источник
Моя строка состояния и панель навигации перекрываются после возврата из альбомного режима YTPlayer. Вот мое решение после попытки версии @comonitos, но не работающей на моей iOS 8
Просто вызывайте эту функцию всякий раз, когда вы хотите исправить положение панели навигации. Я позвонил в YTPlayerViewDelegate
playerView:didChangeToState:
источник