Прочитав все предложения и попробовав несколько вещей, я мог заставить это работать для определенных контроллеров представления, используя следующие шаги:
Первый шаг:
Откройте ваш info.plist и вставьте новый ключ с именем « Показать внешний вид строки состояния на основе контроллера », чтобы НЕТ
Второй шаг (просто объяснение, нет необходимости реализовывать это):
Обычно мы помещаем следующий код в приложение (_: didFinishLaunchingWithOptions :) метод AppDelegate,
Swift 2
UIApplication.sharedApplication().statusBarStyle = .LightContent
Swift 3
UIApplication.shared.statusBarStyle = .lightContent
но это влияет на statusBarStyle
все ViewControllers.
Итак, как заставить это работать для определенных ViewControllers - последний шаг:
Откройте файл viewcontroller, где вы хотите изменить statusBarStyle
и вставьте следующий код viewWillAppear()
,
Swift 2
UIApplication.sharedApplication().statusBarStyle = .LightContent
Swift 3
UIApplication.shared.statusBarStyle = .lightContent
Кроме того, реализуйте viewWillDisappear()
метод для этого конкретного viewController и поместите следующие строки кода,
Swift 2
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.Default
}
Swift 3
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
UIApplication.shared.statusBarStyle = UIStatusBarStyle.default
}
Этот шаг сначала изменит statusBarStyle
конкретный viewcontroller, а затем вернет его обратно, default
когда конкретный viewcontroller исчезнет. Не выполнение viewWillDisappear()
будет statusBarStyle
постоянно менять на новое определенное значениеUIStatusBarStyle.LightContent
Status bar is initially hidden = YES
в файле info.plist, «Просмотр строки состояния на основе контроллера = НЕТ» вызовет скрытие строки состояния.UIStatusBarStyle.Default
использованиеviewWillDisappear()
, вам следует использовать егоviewWillAppear()
для инициализации, а неviewDidLoad()
.... в противном случае, если вы вернетесь к этому представлению без необходимости его повторной загрузки, вы не увидитеStatusBarStyle
ожидаемого.UIApplication.shared.statusBarStyle = .lightContent
(По состоянию на 20 сентября 2019 г.)
Swift 5 , Swift 4.2 , Swift 4
источник
super.viewWillAppear
если копируете и вставляете этот кодUIApplication.shared.statusBarStyle = .lightContent
результатов в этом предупреждении компилятора: Сеттер для 'statusBarStyle' устарел в iOS 9.0: Использование - [UIViewController предпочитаемыйStatusBarStyle]Решение Swift 4.2 с NavigationController
Первый шаг:
Откройте info.plist и вставить новый ключ с именем « View на базе контроллера в строке состояния внешний вид » или
UIViewControllerBasedStatusBarAppearance
на YES , чтобы позволить каждому VC использовать свое собственное свойство статуса.Второй шаг
В каждом VC переопределите свойство предпочитаемое свойство StatusBarStyle следующим образом:
Последний шаг
Переопределение preferredStatusBarStyle свойства в пользовательском классе NavigationController:
источник
Я следовал этому уроку, и он работал для меня. Однако я не уверен, есть ли какие-либо предостережения.
https://coderwall.com/p/dyqrfa/customize-navigation-bar-appearance-with-swift
UIViewControllerBasedStatusBarAppearance
дляfalse
.AppDelegate.swift
, которая содержитdidFinishLaunchingWithOptions
, установите нужный вам цвет.UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent
Swift 3 Обновление *
UIApplication.shared.statusBarStyle = .lightContent
источник
UIApplication.sharedApplication().statusBarHidden = false
в AppDelegate.swift didFinishLauchingWithOptionsЗдесь миллиард ответов, поэтому я подумал, почему бы не добавить еще одно в виде расширения (с помощью @ Cœur)
Swift 3
Расширение:
Реализация:
источник
В вашем Info.plist вы должны определить любое отображение вида строки состояния на основе контроллера.
Если вы определите его как YES, вам следует переопределить функцию предпочитаемое значение StatusBarStyle в каждом контроллере представления.
Если вы определите это НЕТ, тогда вы можете установить стиль в AppDelegate, используя
источник
setStatusBarStyle
устарела в iOS 9.0источник
valueForKey("statusBar")
может не соответствовать рекомендациям AppleSwift 3
Это решение для установки цвета фона строки состояния для конкретного контроллера представления.
источник
SWIFT 2
Мне удалось успешно изменить внешний вид фона строки состояния, добавив в свой viewWillAppear следующее:
источник
Реализовать
preferredStatusBarStyle
как вы упомянули , и вызовself.setNeedsStatusBarAppearanceUpdate()
в ,ViewDidLoad
а также в Info.plist набореUIViewControllerBasedStatusBarAppearance
кYES
(этоYES
по умолчанию)Непонятно, почему он не работает. Мне нужно проверить код. Еще одно предложение - перейти с рабочим кодом
viewDidLoad
UIApplication.sharedApplication().statusBarStyle = .LightContent
и изменить его на значение по умолчанию, когда вы видите, что исчезлиviewWillDisappear
.источник
для быстрой 3
.plist
AppDelegate.swift
источник
В моей ситуации я использую раскадровку для организации своих контроллеров представления. Я хочу изменить весь стиль строки состояния.
Вы можете увидеть на картинке ниже.
Stars
View Controller являетсяCPBaseNavigationController
иCPBaseNavigationController
является подклассомUINavigationController
.Я пытаюсь сделать следующие шаги:
В
AppDelegate.swift
funcdidFinishLaunchingWithOptions
добавитьно без эффекта.
В StoryBoard найдите
Base Tab BarController
(рисунок выше). ВыберитеAttributes Inspector
, изменитеSattus Bar
атрибут наLight Content
.so bad, без эффекта.Последнее, что я понял. В моем пользовательском контроллере навигации
CPBaseNavigationController
добавьте funcpreferredStatusBarStyle
Это работает хорошо!
Кроме того,
statusBarStyle
устарела в 9.0, вы можете использовать-[UIViewController preferredStatusBarStyle]
.источник
Работает для навигационных приложений
источник
Все гораздо проще в Swift 3.0 Xcode 8
Используя код ниже в файле делегата приложения, после
вставить это:
источник
Swift 3
источник
Swift 4 Для определенного ViewController без встроенной навигации ViewViewController просто добавьте это в свой файл ViewController.
источник
Еще один действительно простой способ сделать это - просто создать расширение класса UINavigationController.
Поскольку переопределение
preferredStatusBarStyle:
метода не будет работать UNLESS, мы делаем это внутри класса UINavigationController.источник
Я установил определенный цвет (в формате RGB), используя приведенный ниже код в
App Delegate
файле:Вам также необходимо добавить ниже ключ в
Info.plist
файл:Просмотр внешнего вида строки состояния контроллера с логическим значением, установленным на NO
источник
Я могу предложить вам более простой способ,
У меня это работало в iOS 10.1.
Цель С
стриж
Я удивлен, что никто не указал на это. В любом случае наслаждайтесь :)
источник
У меня были некоторые проблемы с этим. Мне не очень понравилось, что глобальное изменение цвета строки состояния появилось, а затем его изменение на экране исчезло, как принятый ответ. Хотите верьте, хотите нет, но вы можете заставить это работать, переопределив
preferredStatusBarStyle
желаемый вид контроллера. Спустя много времени, это то, что я сделал, чтобы заставить его работать:info.plist
на YES.preferredStatusBarStyle
.modalPresentationCapturesStatusBarAppearance
на Да, то есть.Также, если у вас есть встроенные контроллеры представления, как, например, в контроллере навигации, он будет запрашивать самый верхний контроллер представления для стиля строки состояния.
childViewControllerForStatusBarStyle
Предполагается, что переопределение и передача встроенного контроллера представления работает, но это не для меня. Поэтому я просто вернул предпочтительную строку состояния встроенных контроллеров представления в качестве предпочтительного стиля строки состояния. Что-то вроде этого:источник
UINavigationController
и переопределитьchildViewControllerForStatusBarStyle
переменную там, вернувшисьself.topViewController
.В Swift 4 или 4.2
Вы можете добавить на свой вк
и установите возвращаемое значение
например:
источник
(По состоянию на 10 июня 2020 г.)
Swift 5 ( без редактирования
.Plist
файла )Если вы используете
Storyboard
, перейдите кNavigationController
, выберитеnavigationBar
, нажмите наAttributes Inspector
, затем изменитеstyle
. если вам нужноlight content
( белая строка состояния ), установите все, кроме,default
скажем, установки стиля.black
А если хотитеdark content
( черная строка состояния ), установите егоdefault
.Значение по умолчанию (
UIBarStyleDefault
) приводит к темнойUIStatusBarStyleDefault
строке состояния переднего плана . ИUIBarStyleBlack
дастUIStatusBarStyleLightContent
статус бар.Programatically
Без панели навигации ( Правка
.Plist
)добавить
UIViewControllerBasedStatusBarAppearance
/View controller-based status bar appearance
к вашемуinfo.plist
, и установить значениеtrue
.Override
preferredStatusBarStyle
свойство в вашем контроллереисточник
Обновление Swift 3.0
источник
Что работало со мной, в раскадровке перейдите к контроллеру навигации, выберите панель навигации, нажмите инспектор атрибутов, затем измените стиль с по умолчанию на черный. Это оно!
источник
SWIFT 4.2 Привет, я хотел бы поделиться решением, которое сработало для меня, которое я получил из отличной статьи Грейг Груммитта на эту захватывающую тему.
Шаг 1 Как уже упоминалось, ДОБАВЬТЕ другие в свой PLIST
Шаг 2 в RootViewcontroller добавить ниже
При обновлении либо собственности
statusBarHidden
илиvcStatusBarStyle
он будет вызыватьsetNeedsStatusBarAppearanceUpdate()
и обновлять строку состояния с новыми значениями для либоprefersStatusBarHidden
илиpreferredStatusBarStyle
. В моей ситуации мне пришлось обновить эти свойства для контейнера viewcontroller, который был родителем видимого childviewcontroller. Я сделал это с помощью простого метода делегата.Конечно, при создании экземпляра childViewController (Visible VC) не забудьте установить MainViewcontroller (Container VC) в качестве его делегата. Я иногда делаю. :)
Затем в childViewController я просто вызвал метод делегата, когда необходимо обновить строку состояния.
Как упоминалось выше, Грейг Груммитт более подробно рассказывает об этом решении, а также о работе с UINavigationControllers. Ссылка здесь: таинственный случай строки состояния
источник
Нажмите на группу «Файлы поддержки» (слева вверху - название вашего проекта). Перейдите к информации. Нажмите на + где-то между списками, как показано ниже названия пакета. Добавьте «Просмотр внешнего вида строки состояния на основе контроллера» и установите для него значение «НЕТ». Затем откройте AppDelegate.swift и измените его следующим образом:
Это оно.
источник
Для Xcode 10 вы можете создать класс и поместить его перед вашим классом viewController, вы можете вызвать этот класс во всех контроллерах представления, нужна легкая строка состояния контента ...
Теперь измените ваш класс viewController в:
И это все...
источник
Работает на основе навигации для конкретного контроллера представления в swift4
источник
ПРЕДУПРЕЖДЕНИЕ
Сеттер для 'statusBarStyle' устарел в iOS 9.0: Использование - [UIViewControlleradvanStatusBarStyle]
поэтому мое решение было следующим: создание расширения из контроллера навигации:
и если у вас есть viewController, который будет иметь другой стиль, чем стиль приложения, вы можете сделать это
Допустим, у вас есть стиль состояния приложения,
.default
и вы хотите, чтобы этот экран был таким,.lightContent
чтобы barStyle принял.lightContent
значение по умолчанию, это изменит стиль строки состояния на lightContent, а затем убедитесь, что приviewWillDisappear
изменении barStyle снова на стиль строки состояния приложения который в нашем случае есть.default
.это работает для меня
источник
Пользовательский цвет для строки состояния (iOS11 +, Swift4 +)
Если вы ищете решение, как изменить строку состояния на ваш собственный цвет, это рабочее решение.
источник