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


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

30 931

30 ответов:

  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
}

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

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

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

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

вы проект plist в file:

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

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

В Инфо.контроллер в виде файла plist установить статус бар внешности как нет

в AppDelegate добавить

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

до

- (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];

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

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

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

enter image description here

вот и все.

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

Шаг 1:

на вкладке Информация 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 года (по крайней мере, с навигационным контроллером hidden):

  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

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

-(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 до 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 до Light. Это делает строку состояния белой с экрана запуска. Project Setting

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

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

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

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

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

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

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

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

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

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

чтобы задать глобальный стиль для строки состояния, добавьте другое свойство на вкладке Информация с ключом 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 как 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) затем установите стиль панели навигации на "черный", потому что это означает, что у вас будет" черный " - > темный фон под вашей строкой состояния, поэтому он установит строку состояния на белый

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 файл и дать ему значение YES.

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

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

UINavigationBar.appearance().barStyle = .BlackTranslucent

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

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

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

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

Я надеюсь, что это помогает.

edit

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

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

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

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

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

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

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

     [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

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

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

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

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

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

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

(для меня работает следующее. Если ваше приложение основано на панели вкладок, вы захотите сделать что-то подобное, подклассировав 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

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

UIViewControllerBasedStatusBarAppearance:NO

UIStatusBarStyle:Opaque black style