Как изменить цвет текста строки состояния в iOS

Мое приложение имеет темный фон, но в iOS 7 панель состояния стала прозрачной. Поэтому я ничего не вижу, только зеленый индикатор батареи в углу. Как изменить цвет текста строки состояния на белый, как на главном экране?

Ответы

Ответ 1

  1. Установите для UIViewControllerBasedStatusBarAppearance значение YES в файле .plist.

  2. В viewDidLoad сделайте [self setNeedsStatusBarAppearanceUpdate];

  3. Добавьте следующий метод:

    - (UIStatusBarStyle)preferredStatusBarStyle
    { 
        return UIStatusBarStyleLightContent; 
    }
    

Примечание: это не работает для контроллеров внутри UINavigationController, см. Комментарий Тайсона ниже :)

Swift 3 - это будет работать контроллеры внутри UINavigationController. Добавьте этот код в свой контроллер.

// Preferred status bar style lightContent to use on dark background.
// Swift 3
override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

Swift 5 и SwiftUI

Для SwiftUI создайте новый файл swift с именем HostingController.swift

import Foundation
import UIKit
import SwiftUI

class HostingController: UIHostingController<ContentView> {
    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
}

Затем измените следующие строки кода в SceneDelegate.swift

window.rootViewController = UIHostingController(rootView: ContentView())

в

window.rootViewController = HostingController(rootView: ContentView())

Ответ 2

В качестве альтернативы вы можете отключить внешний вид строки состояния на панели управления:

  • Установите View controller-based status bar appearance в NO в Info.plist.
  • Вызов [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

Примечание. Этот метод устарел в iOS9. Вместо этого используйте preferredStatusBarStyle на UIViewController. (см. Apple Developer Library)

Ответ 3

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

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

  • Стиль строки состояния: Transparent black style (alpha of 0.5)
  • Просмотр состояния строки состояния на основе контроллера: NO
  • Строка состояния изначально скрыта: NO

Ответ 4

Примечание. Большинство исправленных ответов не работают для iOS 7/8

В Info.plist установите "Просмотр строки состояния на основе контроллера" как NO

В AppDelegate добавьте

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

к

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
   ......
   ...
}    

Это решение работает для iOS 7/8

Ответ 5

Для меня ничего не случилось с использованием всех вещей в других ответах (и из других источников/документации). Что помогло установить стиль панели навигации "Черный" в XIB. Это изменило текст на белый без какого-либо кода.

Enter image description here

Ответ 6

Ничего из этого не сработало для меня, так что вот рабочее решение...

В Info.plist добавьте строку:

UIViewControllerBasedStatusBarAppearance и установите значение NO.

Затем в AppDelegate в didFinishLaunchingWithOptions добавьте следующие строки:

[application setStatusBarHidden:NO];
[application setStatusBarStyle:UIStatusBarStyleLightContent];

Ответ 7

Вам не нужно делать какой-либо код для этого

В info.plist вам нужно добавить "Просмотреть внешний вид строки состояния контроллера на основе контроллера": введите описание изображения здесь

& установите для своего значения значение Boolean и значение NO. Затем щелкните по настройкам проекта, затем щелкните вкладку "Общие" и в разделе "Информация о развертывании" установите стиль предпочтительной строки состояния в .Light следующим образом:

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

Вот оно.

Ответ 8

Всего два шага:

Шаг 1:

На вкладке "Информация" project target "Добавить строку:

UIViewControllerBasedStatusBarAppearance, установите значение NO.

Шаг 2:

В проекте AppDelegate.m:

- (BOOL)application:(UIApplication *)application 
        didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
    …
    [application setStatusBarStyle:UIStatusBarStyleLightContent];
    …
}

Ответ 9

Это работает в Golden Master iOS 7 и Xcode 5 семян GM и iOS7 SDK, выпущенных 18 сентября 2013 года (по крайней мере, с навигационным контроллером):

  • Установите the UIViewControllerBasedStatusBarAppearance в NO в Info.plist.

  • В методе ViewDidLoad или где угодно, где вы хотите изменить стиль строки состояния: [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

Ответ 10

Если ваш UIViewController находится внутри UINavigationController, вам нужно будет установить BarStyle:

-[UINavigationBar setBarStyle:UIBarStyleBlack]

Оригинальный ответ здесь

https://devforums.apple.com/message/844264#844264

Ответ 11

Если у вас встроенный контроллер навигации, созданный с помощью Interface Builder, не забудьте установить следующее в классе, управляющем вашим контроллером навигации:

-(UIStatusBarStyle)preferredStatusBarStyle{ 
    return UIStatusBarStyleLightContent; 
} 

Это должно быть все, что вам нужно.

Ответ 12

Я использую Xcode 6 beta 5 в проекте Swift для приложения iOS 7.

Вот что я сделал, и это работает:

info.plist:

Enter image description here

Ответ 13

В AppDelegate.m добавьте следующее.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

} 

И в файле Plist установите "Просмотр состояния панели управления на основе контроллера" на NO.

Ответ 14

Ну, это действительно работает как кусок пирога для меня.

Откройте приложение info.plist.

  • Установите View controller-based status bar appearance в NO
  • Установите Status bar style в UIStatusBarStyleLightContent

Затем перейдите к своему делегату приложения и вставьте следующий код, где вы устанавливаете свои окна RootViewController.

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
{
    UIView *view=[[UIView alloc] initWithFrame:CGRectMake(0, 0,320, 20)];
    view.backgroundColor=[UIColor colorWithRed:0/255.0 green:0/255.0 blue:0/255.0 alpha:1.0];
    [self.window.rootViewController.view addSubview:view];
}

Бинго. Это работает для меня.

Ответ 15

Просто в Appdelegate

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

Ответ 16

  • Перейдите к ProjectTarget,

  • Затем установите Status Bar Style в Light. Это делает статус-бар белым с экрана запуска. Настройка проекта

  • Затем установите View controller-based status bar appearance равным NO в Info.plist.

Ответ 17

Change in info PLIST В Swift 3 это очень просто, всего за 2 шага. Перейдите в ваш info.plist и измените ключ " View controller-based status bar appearance на "НЕТ". Затем в Appdelegate просто добавьте эту строку в метод didfinishlaunchingwithoptions

  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        UIApplication.shared.statusBarStyle = .lightContent
        return true
    }

это было объявлено устаревшим в iOS9, теперь вы должны переопределить это свойство в rootviewcontroller

делать это не рекомендуется в iOS 9 следует сделать это на rootviewcontroller

override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
 }

Ответ 18

iOS 7 позволяет отдельным контроллерам просмотра определять внешний вид строки состояния, как описано в документации разработчика Apple:

iOS 7 дает контроллерам представлений возможность настраивать стиль строки состояния во время работы приложения. Хорошим способом динамического изменения стиля строки состояния является реализация preferredStatusBarStyle и - внутри блока анимации - обновление внешнего вида строки состояния и вызов setNeedsStatusBarAppearanceUpdate.

Настройка отображения строки состояния глобально - это двухэтапный процесс.

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

Затем вам нужно взять на себя ответственность и установить новый глобальный стиль строки состояния.

Чтобы отключить контроль строки состояния просмотра, вам нужно установить свойство View controller-based status bar appearance в Info.plist.

Откройте "Навигатор проектов" и выберите проект для приложения iOS, затем выберите вкладку "Информация".

Наведите указатель мыши на строку, затем щелкните знак плюса, который добавит новое свойство в ваш .plist.

Введите View controller-based status bar appearance в поле Key, затем убедитесь, что для поля Type установлено значение Boolean. Наконец, введите NO в поле Value.

Чтобы установить глобальный стиль для строки состояния, добавьте другое свойство на вкладке "Информация" с помощью клавиши Status bar style, типа String и значения Opaque black style.

Здесь сообщение в блоге с немного более подробной информацией и некоторым примером кода:

http://codebleep.com/setting-the-status-bar-text-color-in-ios-7/

Ответ 19

Ответ обновлен для Xcode GM Seed:

  • В Info.plist поместите View controller-based status bar appearance как NO

  • В проекте задайте:

    Enter image description here

  • В ViewDidLoad:

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

Ответ 20

Не нужно делать лишние, просто напишите этот код в своем viewController и получите цвет статуса белым цветом

- (UIStatusBarStyle)preferredStatusBarStyle{return UIStatusBarStyleLightContent;}

Ответ 21

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

В зависимости от того, где вам нужен стиль строки состояния, вы всегда должны иметь в виду эти 3 балла:

1) Если вам нужна строка состояния на экране запуска или в других местах, где вы не можете управлять им (не на контроллерах, а на некоторых элементах/моментах, управляемых системой, таких как экран запуска) Вы переходите к настройкам своего проекта Настройки проекта

2), если у вас есть контроллер внутри контроллера навигации Вы можете изменить его в построителе интерфейса следующим образом:

a) Выберите навигационную панель вашего навигационного контроллера Выберите панель навигации вашего навигационного контроллера

b) Затем установите стиль панели навигации на "Черный", потому что это означает, что у вас будет "черный" → темный фон в строке состояния, поэтому он установит строку состояния в белый цвет

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

Или сделайте это в коде следующим образом

navigationController?.navigationBar.barStyle = UIBarStyle.Black

3) Если у вас есть только контроллер, который должен иметь собственный стиль строки состояния, и он не встроен в какую-либо структуру контейнера в качестве UINavigationController

Задайте стиль строки состояния в коде для контроллера:

Установка стиля строки состояния в коде

Ответ 22

Просто позвонив

[[UINavigationBar appearance] setBarStyle:UIBarStyleBlack];

в

-(BOOL)application:(UIApplication *)application 
           didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
}

метод моего AppDelegate отлично работает для меня в iOS7.

Ответ 23

Это описано в Руководстве по переходу на iOS 7 UI, для которого вам необходим идентификатор разработчика Apple для прямого доступа. Соответствующая выдержка:

Поскольку строка состояния прозрачна, просмотр позади нее показывает. [...] Используйте константу UIStatusBarStyle, чтобы указать, должно ли содержимое панели состояния быть темным или светлым:

UIStatusBarStyleDefault отображает темное содержимое. [...]

UIStatusBarStyleLightContent отображает световой контент. Используйте, когда темное содержимое находится за панель состояния.

Также возможно интерес:

В iOS 7 вы можете управлять стилем строки состояния с отдельного контроллера vew и изменять его во время работы приложения. Чтобы принять участие в этом поведении, добавьте ключ UIViewControllerBasedStatusBarAppearance в файл приложения Info.plist и присвойте ему значение YES.

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

Ответ 24

Если вы все еще хотите использовать View controller-based status bar appearance в инфо .plist, чтобы установить значение YES, это означает, что вы можете изменить строку состояния для каждого контроллера вида, используйте следующее для белого текста в строке состояния в ViewDidLoad:

[[[self navigationController] navigationBar] setBarStyle:UIBarStyleBlackTranslucent];

Ответ 25

Если вы хотите получить тот же результат с помощью Swift, вы можете использовать этот код в файле AppDelegate.swift:

UINavigationBar.appearance().barStyle = .BlackTranslucent

И текст вашей строки состояния будет белым:-)!

Ответ 26

Вот Apple Guidelines/Инструкция по изменению строки состояния. Только темные и светлые (в то время как и черные) разрешены в строке состояния.

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

Если вы хотите установить стиль строки состояния, уровень приложения, то установите для 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 в соответствии с уровнем настройки стиля строки состояния. enter image description here


Вот несколько хитростей, чтобы изменить/установить цвет фона для строки состояния во время запуска приложения или во время 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
    }

}



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

enter image description here

Ответ 27

Я сделал несколько вещей, и он работает для меня.

Без изменений в коде я установил свой файл .plist следующим образом:

  • Просмотр состояния строки состояния на основе контроллерa > NO
  • Стиль строки состояния > UIStatusBarStyleLightContent (простая строка)

Надеюсь, это поможет.

Изменить

Для каждого контроллера просмотра я изменяю свойство "Синтаксис метрики" в раскадровке "из строки" с "выводится" на "Легкий контент"

Ответ 28

В Plist добавьте это:

  • Стиль строки состояния: UIStatusBarStyleLightContent
  • Просмотр состояния строки состояния на основе контроллера: NO

Ответ 29

в файле info.plist установите значение поля NO Просмотрите внешний вид строки состояния на основе контроллера и установите статусбара стиль света в цели > общие настройки.

Ответ 30

Позвольте мне дать вам полный ответ на ваш вопрос. Изменение цвета текста в строке состояния очень просто, но его немного запутывает в iOS 7 специально для новичков.

Если вы пытаетесь изменить цвет с черного на белый в Storyboard, выбрав контроллер вида и перейдя на Simulated Metrics с правой стороны, это не сработает, и я не знаю, почему. Он должен работать, изменяясь таким образом, но любым способом.

Во-вторых, вы не найдете свойство UIViewControllerBasedStatusBarAppearance в своем plist, но по умолчанию его не существует. Вы должны добавить его самостоятельно, нажав на кнопку +, а затем установите значение НЕТ.

Цвет текста в строке состояния ios 7

Наконец, вам нужно перейти в файл AppDelegate.m и добавить следующее в метод didFinishLaunchingWithOptions, добавить следующую строку:

     [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

Это изменит цвет на белый для всех ваших контроллеров. Надеюсь, это поможет!