Изменение цвета текста строки состояния на заставке iOS 7

98

Я знаю, что уже есть несколько вопросов о stackoverflow , в которых говорится, как изменить строку состояния для всех контроллеров представления. В настоящее время я меняю цвет строки состояния следующим образом:

if(IS_IOS7)
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

в application:DidFinishLaunching

Кроме того, я изменил значение UIViewControllerBasedStatusBarAppearanceв списке на NO. Однако на экране-заставке текст строки состояния по-прежнему отображается черным цветом.

Можно ли изменить цвет текста строки состояния на заставке ?

Тьяго Алмейда
источник
Что вы имеете в виду, что строка состояния все еще отображается черным цветом: если ваш код работает, шрифт строки состояния должен быть белым, цвет фона строки состояния зависит от вашего заставки (которая теперь должна включать высоту строки состояния - 20 пикселей)
Vinzzz
Извините, я действительно пропустил текстовое слово. Я меняю только цвет текста строки состояния. Я могу изменить его после появления экрана-заставки, но я не могу его изменить, когда появляется экран-заставка.
Тьяго Алмейда,

Ответы:

224

В файл plist проекта добавьте свойство «Стиль строки состояния» (ключ UIStatusBarStyle). Затем проигнорируйте все возможные значения, перечисленные в раскрывающемся списке для этого свойства, и введите UIStatusBarStyleLightContentвместо них.

И вам не нужно устанавливать UIViewControllerBasedStatusBarAppearanceзначение NOв своем списке, вы можете установить preferredStatusBarStyleжелаемое для своих контроллеров представления.

Vinzzz
источник
Есть ли способ сделать это совместимым с тонированной строкой состояния на iOS 6?
Рафаэль Нобре,
1
Цвет текста строки состояния - белый или черный. Фон панели берется из изображения запуска, а затем из представления viewController, если он простирается ниже полос.
Vinzzz
1
После ТОННЫ разных методов этот НАКОНЕЦ сработал (с UIViewControllerBasedStatusBarAppearance, установленным в NO). Ты герой.
Тамаш Сенгель
вы также можете сделать это с помощью кода UIApplication.sharedApplication (). statusBarStyle = .LightContent. Я делаю это в AppDelegate
Ясмин Темкин
@Yasmin: чтобы сменить цвет ПОСЛЕ заставки, это решение уже было частью вопроса;)
Vinzzz
33

Вы можете сделать это, не записывая ни одной строчки кода.
Выполните следующие действия, чтобы текст строки состояния стал белым во всем приложении.

В вашем проекте файл plist :

  • Стиль строки состояния: UIStatusBarStyleLightContent
  • Просмотр внешнего вида строки состояния на основе контроллера: NO
  • Строка состояния изначально скрыта: NO
Лукас
источник
Принятый ответ хорош, но он не сработал на всех моих контроллерах представления без выполнения второго пункта выше. Спасибо!
Клифтон Лабрам
«Просмотр внешнего вида строки состояния на основе контроллера: YES» все еще
помогает
19

Вы можете сделать следующее, чтобы во всем приложении отображалась светлая строка состояния.

  1. Выберите название проекта в навигаторе проекта.
  2. Выберите имя цели из списка в левом столбце редактора проекта.
  3. Щелкните Общие в верхней части редактора проекта.
  4. Установить стиль строки состояния -> Свет

В свой файл plist добавьте следующие значения:

  1. Стиль строки состояния - UIStatusBarStyleLightContent
  2. Просмотр появления строки состояния на основе контроллера - НЕТ

Это поможет вам сделать строку состояния БЕЛЫМ цветом во всем приложении, включая SPLASH SCREEN.

Анудж ВМ
источник
7

Установите UIViewControllerBasedStatusBarAppearanceзначение "Нет" в списке.

Затем добавьте следующий код в параметр завершения запуска

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {

   [application setStatusBarStyle:UIStatusBarStyleLightContent];

    self.window.clipsToBounds =YES;

    self.window.frame =  CGRectMake(0,20,self.window.frame.size.width,self.window.frame.size.height-20);
}

Пожалуйста, следуйте этому коду, он сработал для меня

Прижит Августин
источник
это показывает белый текст в строке состояния, а мой фон тоже светлый. как показать черный текст
Mangesh
Mangesh on the Target, перейдите к общим настройкам, там у вас будет возможность установить стиль строки состояния
Preejith август
Вы могли бы написать эту первую строку немного проще, используя точечный синтаксис, например: if (UIDevice.currentDevice.systemVersion.floatValue >= 7) {
Тодд Леман,
2

Вот рекомендации Apple / инструкция по изменению строки состояния.

Вот - Как изменить стиль строки состояния:

Если вы хотите , чтобы стиль набора статуса бара, уровень приложений , а затем установить UIViewControllerBasedStatusBarAppearanceв NOвашей .plist»файла`.

Если вы хотите установить стиль строки состояния, на уровне контроллера представления выполните следующие действия:

  1. Установите UIViewControllerBasedStatusBarAppearanceзначение YESв .plistфайле, если вам нужно установить стиль строки состояния только на уровне UIViewController.
  2. В функции добавления viewDidLoad - setNeedsStatusBarAppearanceUpdate

  3. переопределить предпочтительныйStatusBarStyle в вашем контроллере представления.

-

override func viewDidLoad() {
    super.viewDidLoad()
    self.setNeedsStatusBarAppearanceUpdate()
}

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

Установите значение .plist в соответствии с уровнем настройки стиля строки состояния. введите описание изображения здесь


Вы можете установить цвет фона для строки состояния во время запуска приложения или во время viewDidLoad вашего контроллера представления.

extension UIApplication {

    var statusBarView: UIView? {
        return value(forKey: "statusBar") as? UIView
    }

}

// Set upon application launch, if you've application based status bar
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
        return true
    }
}


or 
// Set it from your view controller if you've view controller based statusbar
class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
    }

}



Вот результат:

введите описание изображения здесь

Крунал
источник
1

Вы можете сделать следующее, чтобы во всем приложении отображалась светлая строка состояния.

Выберите название проекта в навигаторе проекта. Выберите имя цели из списка в левом столбце редактора проекта. Щелкните Общие в верхней части редактора проекта. Установить стиль строки состояния -> Свет

Усман Нисар
источник