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

990

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

Александр Веремчук
источник
9
Эта ссылка содержит интересную информацию по этому вопросу: doubleencore.com/2013/09/…
Адриано Лукас,

Ответы:

1380
  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())
Питер Б. Крамер
источник
78
Мне не нужен Шаг 2.
Джейсон Мур
37
Кажется, не работает на iOS 7 Beta 5 с Xcode5-DP5. Предпочитаемый StatusBarStyle не вызывается.
wilsontgh
18
UIViewControllerBasedStatusBarAppearance изменено на Просмотр внешнего вида строки состояния на основе контроллера в Xcode 5 GM seed
parilogic
42
Получил ответ для Xcode GM Seed: 1. В Info.plist поместите вид отображения строки состояния на основе контроллера как НЕТ 2. В appDelegate, внутри метода appDidFinishLaunching, поместите [[UIView появление] setTintColor: [UIColor whiteColor]];
parilogic
101
UINavigationController представляет собой особый случай, выше не будет работать. Просто часами царапал мою голову над этим. См. Здесь для решения: stackoverflow.com/a/19513714/505457
Тайсон
848

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

  1. Набор View controller-based status bar appearanceдля NOв вашей Info.plist.
  2. Вызов [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

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

wilsontgh
источник
16
Это гораздо лучший и простой маршрут.
Мик Бирн
227
Не нужно кодировать. Все это можно сделать из plist: (1) установить «Просмотр внешнего вида строки состояния на основе контроллера» на NO и (2) установить «Стиль строки состояния» на «Непрозрачный черный стиль». (Необработанные значения: UIViewControllerBasedStatusBarAppearance -> NO и UIStatusBarStyle -> UIStatusBarStyleBlackOpaque)
SwiftArchitect,
3
Обратите внимание, что вы должны установить для соответствующего значения info.plist значение NO, чтобы это работало.
Абхи Беккерт,
9
@gothicdev: хороший улов. Приму ваш ответ, так как он самый чистый. Легкая опция для стиля бара может быть такой: UIStatusBarStyleLightContent
benka
9
Этот метод устарел в iOS 9.
lostAtSeaJoshua
439

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

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

  • Стиль строки состояния: Transparent black style (alpha of 0.5)
  • Просмотр внешнего вида строки состояния на основе контроллера: NO
  • Строка состояния изначально скрыта: NO
Лукас
источник
12
Я не знаю, изменились ли вещи, но значение UIStatusBarStyleLightContent не распознается XCode и не встречается ни в одной документации ... Хотя, похоже, работает.
Натан Х
5
Этот также изменил его на заставке, в то время как просто установить его в навигаторе не будет ... Слава!
viniciusnz
3
Определенно, самый простой способ сделать это и, как уже упоминалось, также работает на заставке.
чудес
4
В HOWEVER нет ничего, UIStatusBarStyleLightContentчто plist infoвызывало бы Transparent Blackтот же трюк :) плюс, вам нужно добавить View controller-based status bar appearanceего, поскольку его там нет изначально, и это все, что вам нужно, чтобы заставить его работать :)
user1949873
45
Для ленивых людей, как я, скопируйте и уйдите: <key>UIStatusBarStyle</key> <string>UIStatusBarStyleLightContent</string> <key>UIViewControllerBasedStatusBarAppearance</key> <false/>
Адам Уэйт
241

Примечание. Ответ с наибольшим количеством голосов не работает для iOS 7/8.

В Info.plist установите «Просмотр внешнего вида строки состояния на основе контроллера» как НЕТ

В AppDelegate добавить

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

в

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

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

Прадип Махдеву
источник
10
Устаревший в iOS 9.: - /
sudo make install
112

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

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

haraldmartin
источник
3
В устройстве у меня не работал ни один из ответов выше, кроме этого. Я думаю, что это говорит все о новой системе, что вы должны установить навигационную панель в ЧЕРНОЕ, чтобы иметь статусную строку текста БЕЛЫЙ.
MrTJ
2
После того, как мы много чего пережили, это то, что в итоге получилось. Стиль был установлен по умолчанию. Изменил это и удалил все другие взломы строки состояния, и это работает.
Гуджамин
1
Если вы не хотите устанавливать все свои навигационные панели в IB, вы также можете установить его внешний прокси. [[UINavigationBar Внешний вид] setBarStyle: UIBarStyleBlack];
Стив Мозер
3
У меня не работает в iOS7 Раскадровка. Похоже, это может быть побочный эффект или что-то еще?
Крис
Я хотел бы подтвердить, что все вышеперечисленные ответы не сработали и для меня. После изображения текст строки состояния выглядит белым. Но я повторяю еще раз, вышеупомянутые ОТВЕТЫ с Xcode 6.2 и iOS 8.2 не работают.
Маркус
98

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

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

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

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

[application setStatusBarHidden:NO];
[application setStatusBarStyle:UIStatusBarStyleLightContent];
stepik21
источник
Это решение работало для меня, в то время как вышеприведенные - нет.
Джон Контарино
Удивительно, но этот UIViewControllerBasedStatusBarAppearance конвертируется в то же самое: автоматически
просматривать
63

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

Вам необходимо добавить ключ «Просмотр внешнего вида строки состояния на основе контроллера» в info.plist следующим образом: введите описание изображения здесь

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

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

Это оно.

Аджинкя Патил
источник
1
Мне понравился твой подход! В моем случае я пытался понять, как сделать так, чтобы стиль строки состояния был светлым, только когда он полноэкранный (без панели навигации). Затем я понял, что все остальные экраны должны соответствовать тому же стилю освещения. Таким образом, хорошее решение состоит в том, чтобы установить для всего этого. Спасибо! (:
Игорь де Лоренци
Если вам не нужно менять это когда приложение работает. Это лучший подход.
Майкл
Этот подход определенно работает, но он вводит странную проблему на iPad. Если ваше приложение поддерживает глубокие ссылки, и когда вы запускаете приложение через deeplink, обратная ссылка, появляющаяся в строке состояния, исчезает.
Читраншу Астана
Лучший и самый простой.
Амит Кумар
лучшее решение для меня: D
Золотая курица
48

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

Шаг 1:

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

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

Шаг 2:

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

- (BOOL)application:(UIApplication *)application 
        didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{[application setStatusBarStyle:UIStatusBarStyleLightContent];}
Folse
источник
4
Мне нравится этот ответ, поскольку я впервые использую параметр "application"))
MUH Mobile Inc.
Точечная запись и это было бы идеально;)
Rivera
43

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

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

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

Денис Федотовс
источник
1
UIViewControllerBasedStatusBarAppearance значения по умолчанию, кажется, ДА. "Приложения по умолчанию используют новую систему управления строкой состояния на основе контроллера представления. Чтобы отказаться от этого, добавьте значение NO для ключа UIViewControllerBasedStatusBarAppearance в свой Info.plist." [ bgr.com/2013/09/10/ios-7-gm-change-log-release-notes/]
Жолт
1
Ya !! После установки значения UIViewControllerBasedStatusBarAppearance в NO строка состояния скрывается в представлениях.
CashLee 李秉骏
это должно применяться ко всем viewdidload?
Арнли Вискайно
Вы можете добавить его только в методе appDelegates didFinishLoading. Или в первом представлении метода viewDidLoad, если вы не хотите, чтобы он изменился.
Денис Федотов
1
фантастически, этот сделал свою работу. простое и отличное кодирование.
Фелипе
32

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

-[UINavigationBar setBarStyle:UIBarStyleBlack]

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

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

Мохит Падалия
источник
Нет, это просто делает цвет панели навигации таким же, как цвет текста в строке состояния. Это скрывает проблему, а не исправляет ее!
wpearse
2
В iOS7 строка состояния будет имитировать UINavigationBar, если представление содержит UINavigationController, поэтому во многих случаях это правильный ответ.
Джонстафф
29

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

-(UIStatusBarStyle)preferredStatusBarStyle{ 
    return UIStatusBarStyleLightContent; 
} 

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

Мэтт Бернардо
источник
Это было единственное решение, которое работало для меня в приложении без раскадровок и без XIB. Должно быть полезно и для пользователей, не являющихся членами IB.
Джонни Спаркс
2
Это было идеально для меня, когда мне нужно было установить стиль по-разному в каждом контроллере представления
Бен
Если вы хотите сохранить для параметра «Просмотр внешнего вида строки состояния на основе контроллера» значение «Да», этот способ можно использовать. Спасибо!
cloudsurfin
28

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

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

info.plist:

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

fancoolo
источник
2
Спасибо, похоже, только ваше решение работает с последней версией IOS7
Maman
Это решение показывает строку состояния при загрузке приложения на экране запуска.
Хуан Боэро
Решил мои проблемы в xCode 7.1. Последняя версия. Apple забыла пару важных вещей, чтобы заставить что-то работать. Снова.
Майкл
22

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

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

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

} 

А в файле Plist установите для параметра «Просмотр внешнего вида строки состояния на основе контроллера» значение NO.

нео D1
источник
20

Просто в приложении

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Вивек Сехрават
источник
5
Единственный ответ, который действительно работал для меня.
Вим Хаанстра
6
Но для этого нам нужно отказаться от просмотра строки состояния на основе контроллера .
iamyogish
Устаревший в iOS9
Димитрис
20

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

Перейти к вашему приложению info.plist.

  1. Установите View controller-based status bar appearanceнаNO
  2. Установите 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];
}

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

Шахид Икбал
источник
1
я думаю, что это правильный ответ (часть списка вопросов) ... зачем мне добавлять статический код на didfinishlaunchingwithoptions ... Если вам нужен один и тот же цвет для всего приложения, это правильный путь
user2387149
20
  1. Перейти к Project-> Target,

  2. Затем установите Status Bar Styleна Light. Строка состояния становится белой на экране запуска. Настройка проекта

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

Wanbok Choi
источник
2
Вторая часть , где вы установили фактический View controller-based status bar appearance equalTo NOбыл кусок я пропускал. Спасибо
Уилл
18

Изменение в информации 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
 }
Джеймс Рочабрун
источник
1
Это просто здорово, братан :) Спасибо.
Нареш Редди М
в iOS 9 это делать не рекомендуется, это следует делать с помощью переопределения rootviewcontroller var предпочитаемое_статус_BarStyle: UIStatusBarStyle {возвращение .lightContent}
Джеймс Рочабрун
17

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/

Джош Эрл
источник
Спасибо. Моя проблема заключалась в том, что я не видел, чтобы для типа "Просмотр внешнего вида строки состояния на основе контроллера" было задано значение String. Редактирование файла .plist «вручную» и добавление логического значения прояснили ситуацию.
Крис Принц
12

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

- (UIStatusBarStyle)preferredStatusBarStyle{return UIStatusBarStyleLightContent;}
Мохит Томар
источник
Поместите это в ViewController.m после реализации. Это самый простой и отлично работает! Спасибо, Мохит!
Фил Малкинс
12

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

  1. В Info.plistположить View controller-based status bar appearanceвNO

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

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

  3. В ViewDidLoad:

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

parilogic
источник
Это изменило панель вкладок, а не строку состояния для меня.
Кит
11

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

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

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

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

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

б) Затем установите стиль панели навигации на «Черный», потому что это означает, что у вас будет «черный» -> темный фон под строкой состояния, поэтому он установит для строки состояния белый цвет.

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

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

navigationController?.navigationBar.barStyle = UIBarStyle.Black

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

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

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

Фоукс
источник
пожалуйста, объясните ваш случай, и я постараюсь помочь
Fawkes
1
Я должен был добавить StatusBarIsIntiallyHidden = NO к списку, а также ViewControllerBasedApplicationStatusBarAppearnce = NO к списку. Тогда это работает, используя первую часть
Майкл
Был ли у вас экран-заставка с тем же «изображением», что и у первого контроллера представления загрузки? А также, в разделе «Информация» вашей цели вы можете попробовать установить «Скрыть строку состояния» в false и избежать работы с вашим .plist. Флаг «StatusBarIsIntiallyHidden»
Fawkes
Я не буду. Он использует сгенерированный по умолчанию XIB.
Майкл
Я действительно обнаружил эту проблему при создании нового проекта в xCode 7.1, поэтому я подумал, что это так странно
Майкл
10

Просто звоню

[[UINavigationBar appearance] setBarStyle:UIBarStyleBlack];

в

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

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

Cagdas Altinkaya
источник
Ничего себе, много дерьма здесь, но этот ответ работал для меня. Я использую Xcode 6 и iOS 8 SDK
Итан Паркер
1
Отлично, у меня работает в iOS 9 сView controller-based status bar appearance = NO
dstudeba
9

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

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

UIStatusBarStyleDefaultотображает темный контент. [...]

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

Также возможно представляет интерес:

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

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

Аарон Миллер
источник
3
Я уже пробовал [приложение setStatusBarStyle: UIStatusBarStyleLightContent]; но на самом деле ничего не меняется, цвет текста по-прежнему черный
Александр Веремчук
Я бы хотел помочь, но, как я уже сказал, я недостаточно знаком с процессом разработки iOS, чтобы знать, что предложить. Сожалею!
Аарон Миллер
1) установить для UIViewControllerBasedStatusBarAppearance значение YES в plist; 2) в viewDidLoad сделать [self setNeedsStatusBarAppearanceUpdate]; 3) добавьте следующий метод :-( UIStatusBarStyle) prefeStatusBarStyle {return UIStatusBarStyleLightContent; }
Питер Б. Крамер
9

Вот 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 в соответствии с уровнем настройки стиля строки состояния. введите описание изображения здесь


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

}



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

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

Krunal
источник
8

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

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

  • Просмотреть внешний вид строки состояния на основе контроллера> НЕТ
  • Стиль строки состояния> UIStatusBarStyleLightContent (простая строка)

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

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

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

Фелипе Антонио Кардосо
источник
8

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

UINavigationBar.appearance().barStyle = .BlackTranslucent

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

fraxool
источник
8

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

[[[self navigationController] navigationBar] setBarStyle:UIBarStyleBlackTranslucent];
Эйрик
источник
Панель навигации! = Строка состояния.
Майкл Петерсон
... Вы пробовали это? (И да, для строки состояния)
eirik
7

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

  • Стиль строки состояния: UIStatusBarStyleLightContent
  • Просмотр внешнего вида строки состояния на основе контроллера: NO
Ramdhas
источник
7

в info.plist установите значение поля NO. Просмотрите внешний вид строки состояния на основе контроллера и установите индикатор стиля строки состояния в target> general setting.

parvind
источник
2
победитель победитель куриный ужин
Tommybananas
7

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

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

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

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

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

     [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

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

Амит Шелгаонкар
источник
Этот метод устарел в iOS 9
Trung Bui