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

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

30 ответов


  1. установить UIViewControllerBasedStatusBarAppearance to 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
}

кроме того, вы можете отказаться от внешнего вида строки состояния на основе контроллера вида:

  1. Set View controller-based status bar appearance до NO в своем Info.plist.
  2. вызов [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

Примечание: этот метод был устаревшим в iOS9. Использовать preferredStatusBarStyle на UIViewController вместо этого. (см. Библиотека Разработчиков Apple)


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

вы проект plist в:

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

Примечание: большинство ответов upvoted не работает для iOS 7 / 8

In Info.plist установить "вид контроллера на основе строки состояния" как нет

в AppDelegate добавить

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

to

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

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


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

Enter image description here


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

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

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

затем в AppDelegate в didFinishLaunchingWithOptions добавить эти строки:

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

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

вам нужно добавить ключ" просмотр внешнего вида строки состояния на основе контроллера " в info.plist следующим образом:enter image description here

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

enter image description here

вот и все.


всего два шага, как показано ниже:

Шаг 1:

на вкладке Info project target Добавьте Строку:

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

Шаг 2:

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

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

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

  1. Set the UIViewControllerBasedStatusBarAppearance до NO в Info.plist.

  2. на ViewDidLoad метод или где угодно, где вы хотите изменить статус бар в стиле : [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];


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

-[UINavigationBar setBarStyle:UIBarStyleBlack]

оригинальный ответ тут

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


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

-(UIStatusBarStyle)preferredStatusBarStyle{ 
    return UIStatusBarStyleLightContent; 
} 

Это все, что вам нужно.


Я использую Xcode 6 бета 5 на Свифт проект, для приложения iOS 7.

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

информация.файл plist:

Enter image description here


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

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

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

} 

и в файле Plist установите "вид на основе контроллера внешний вид строки состояния" на нет.


Просто В Appdelegate

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

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

перейдите в приложение info.plist.

  1. Set View controller-based status bar appearance to NO
  2. Set Status bar style до UIStatusBarStyleLightContent

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

#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];
}

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


  1. на Project ->Target,

  2. затем установить Status Bar Style to Light. Он делает строку состояния белой с экрана запуска. Project Setting

  3. затем установить View controller-based status bar appearance равна NO на Info.plist.


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

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

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

во-первых, вам нужно сказать iOS, что вы не хотите устанавливать внешний вид строки состояния на основе просмотра.

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

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

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

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

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

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

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

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


Change in info PLIST В Swift 3 очень легко всего за 2 шага. Перейти к вашей информации.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
    }

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

- (UIStatusBarStyle)preferredStatusBarStyle{return UIStatusBarStyleLightContent;}

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

  1. на Info.plist поставить View controller-based status bar appearance as NO

  2. в проект, установил:

    Enter image description here

  3. В ViewDidLoad:

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];


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

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

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

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

a) выберите Панель навигации навигационного контроллера Select the navigation bar of your navigation controller

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

enter image description here

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

navigationController?.navigationBar.barStyle = UIBarStyle.Black

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

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

Setting the status bar style in code


просто называя

[[UINavigationBar appearance] setBarStyle:UIBarStyleBlack];

на

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

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


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

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

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

UIStatusBarStyleLightContent показывает светлое содержание. Использовать при темном содержимом за строкой состояния.

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

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

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


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

UINavigationBar.appearance().barStyle = .BlackTranslucent

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


Я сделал некоторые вещи по-другому и это работает для меня.

без изменений в коде, я сделал config my .plist файл, как это:

  • вид на основе контроллера внешний вид строки состояния > нет
  • стиль строки состояния > UIStatusBarStyleLightContent (простая строка)

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

редактировать

для каждого контроллера вида я изменяю свойство"строка состояния" моделируемых метрик, в раскадровка, от " inferred "до"Light Content"


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


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

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

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

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

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

     [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

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


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

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

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

Если вы используете навигационный контроллер и хотите управлять строкой состояния на основе контроллера вида, вы захотите подкласс UINavigationController и реализовать preferredStatusBarStyle таким образом, что он возвращает предпочтение topViewController.

убедитесь, что вы изменили ссылку на класс В сцене раскадровки fromUINavigationController для вашего подкласса (например, MyNavigationController в примере ниже).

(для меня работает следующее. Если ваше приложение основано на TabBar, вы захотите сделать что-то подобное, подклассировав UITabBarController, но я этого не пробовал).

@interface MyNavigationController : UINavigationController

@end

@implementation MyNavigationController

- (UIStatusBarStyle)preferredStatusBarStyle
{
    return self.topViewController.preferredStatusBarStyle;
}

@end

чтобы подвести итог, отредактируйте свой проект Info.plist и добавить:

View controller-based status bar appearance : NO

Status bar style : Opaque black style

или если у вас есть raw-ключ / значение plist

UIViewControllerBasedStatusBarAppearance : NO

UIStatusBarStyle : Opaque black style