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

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

891
задан Oleksandr Veremchuk 16 июля '13 в 17:11
источник поделиться
52 ответов
  • 1
  • 2
  • Установите UIViewControllerBasedStatusBarAppearance в YES в файле .plist.

  • В viewDidLoad выполните a [self setNeedsStatusBarAppearanceUpdate];

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

    - (UIStatusBarStyle)preferredStatusBarStyle
    { 
        return UIStatusBarStyleLightContent; 
    }
    

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

Swift 3. Это будет работать с контроллерами внутри UINavigationController. Добавьте этот код внутри своего контроллера.

// Preferred status bar style lightContent to use on dark background.
// Swift 3
override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}
1269
ответ дан Peter B. Kramer 21 июля '13 в 6:36
источник поделиться

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

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

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

830
ответ дан wilsontgh 12 авг. '13 в 13:35
источник поделиться

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

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

  • Стиль строки состояния: Transparent black style (alpha of 0.5)
  • Просмотр состояния строки состояния на основе контроллера: NO
  • Строка состояния изначально скрыта: NO
424
ответ дан Lucas 11 сент. '13 в 7:47
источник поделиться

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

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

В AppDelegate добавьте

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

к

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

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

240
ответ дан Pradeep Mahdevu 23 сент. '13 в 8:11
источник поделиться

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

Enter image description here

105
ответ дан haraldmartin 12 сент. '13 в 19:42
источник поделиться

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

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

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

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

[application setStatusBarHidden:NO];
[application setStatusBarStyle:UIStatusBarStyleLightContent];
90
ответ дан stepik21 29 дек. '13 в 14:28
источник поделиться

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

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

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

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

Вот оно.

49
ответ дан Ajinkya Patil 09 февр. '16 в 12:00
источник поделиться

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

Шаг 1:

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

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

Шаг 2:

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

- (BOOL)application:(UIApplication *)application 
        didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
    …
    [application setStatusBarStyle:UIStatusBarStyleLightContent];
    …
}
48
ответ дан folse 21 дек. '13 в 16:55
источник поделиться

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

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

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

41
ответ дан Deniss Fedotovs 13 сент. '13 в 11:28
источник поделиться

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

-[UINavigationBar setBarStyle:UIBarStyleBlack]

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

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

32
ответ дан Mohit Padalia 27 сент. '13 в 11:16
источник поделиться

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

-(UIStatusBarStyle)preferredStatusBarStyle{ 
    return UIStatusBarStyleLightContent; 
} 

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

28
ответ дан matt bernardo 19 авг. '13 в 3:41
источник поделиться

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

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

info.plist:

Enter image description here

26
ответ дан fancoolo 21 авг. '14 в 1:34
источник поделиться

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

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

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

} 

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

22
ответ дан neo D1 06 сент. '14 в 7:09
источник поделиться

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

Откройте приложение 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];
}

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

20
ответ дан Shahid Iqbal 10 янв. '14 в 15:40
источник поделиться

Просто в Appdelegate

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
20
ответ дан Vivek Sehrawat 16 янв. '14 в 20:34
источник поделиться
  • Перейдите к ProjectTarget,

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

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

19
ответ дан Wanbok Choi 31 мая '16 в 4:46
источник поделиться

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/

17
ответ дан Josh Earl 10 дек. '13 в 16:47
источник поделиться

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

  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        UIApplication.shared.statusBarStyle = .lightContent
        return true
    }
12
ответ дан James Rochabrun 28 марта '17 в 1:23
источник поделиться

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

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

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

    Enter image description here

  • В ViewDidLoad:

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

12
ответ дан parilogic 16 сент. '13 в 9:43
источник поделиться

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

- (UIStatusBarStyle)preferredStatusBarStyle{return UIStatusBarStyleLightContent;}
11
ответ дан Mohit tomar 27 сент. '13 в 11:49
источник поделиться

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

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

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

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

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

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

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

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

navigationController?.navigationBar.barStyle = UIBarStyle.Black

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

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

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

11
ответ дан Fawkes 17 сент. '15 в 16:18
источник поделиться

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

[[UINavigationBar appearance] setBarStyle:UIBarStyleBlack];

в

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

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

10
ответ дан Cagdas Altinkaya 10 нояб. '13 в 23:07
источник поделиться

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

UINavigationBar.appearance().barStyle = .BlackTranslucent

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

8
ответ дан fraxool 10 янв. '16 в 22:30
источник поделиться

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

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

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

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

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

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

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

8
ответ дан Aaron Miller 16 июля '13 в 17:24
источник поделиться

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

7
ответ дан parvind 30 марта '15 в 8:06
источник поделиться

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

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

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

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

Изменить

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

7
ответ дан Felipe Antonio Cardoso 22 сент. '13 в 16:54
источник поделиться

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

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

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

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

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

     [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

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

7
ответ дан Amit Shelgaonkar 30 июня '15 в 20:38
источник поделиться

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

[[[self navigationController] navigationBar] setBarStyle:UIBarStyleBlackTranslucent];
7
ответ дан eirik 05 февр. '15 в 15:28
источник поделиться

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

View controller-based status bar appearance: NO

Status bar style: Opaque black style

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

UIViewControllerBasedStatusBarAppearance: NO

UIStatusBarStyle: Opaque black style

6
ответ дан budidino 08 окт. '14 в 17:17
источник поделиться

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

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

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

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

@interface MyNavigationController : UINavigationController

@end

@implementation MyNavigationController

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

@end
5
ответ дан Juddster 16 окт. '13 в 21:21
источник поделиться
  • 1
  • 2

Другие вопросы по меткам или Задайте вопрос