Как изменить цвет текста строки состояния в iOS
мое приложение имеет темный фон, но в iOS 7 строка состояния стала прозрачной. Так что я ничего не вижу, только зеленый индикатор батареи в углу. Как я могу изменить цвет текста строки состояния на белый, как на главном экране?
30 ответов:
установить
UIViewControllerBasedStatusBarAppearance
доYES
в рамках .plist файл.на
viewDidLoad
сделать[self setNeedsStatusBarAppearanceUpdate];
добавить следующий метод:
- (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 }
кроме того, вы можете отказаться от внешнего вида строки состояния на основе контроллера вида:
- Set
View controller-based status bar appearance
доNO
в своемInfo.plist
.- вызов
[[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. Это изменило текст на белый без какого-либо кода вообще.
ничего из этого не сработало для меня, так что вот рабочее решение...
на
Info.plist
добавьте строку:
UIViewControllerBasedStatusBarAppearance
и установите значениеNO
.затем в AppDelegate в
didFinishLaunchingWithOptions
добавить эти строки:[application setStatusBarHidden:NO]; [application setStatusBarStyle:UIStatusBarStyleLightContent];
вам не нужно делать каких-либо код для этого
вы должны добавить "вид контроллера на основе внешнего вида строки состояния" ключ в информации.plist следующим образом:
и установить его тип значения булево & значение нет. Затем нажмите "параметры проекта", затем перейдите на вкладку "Общие" и в разделе "Сведения о развертывании" установите предпочтительный стиль строки состояния .Свет следующим образом:
вот и все.
всего два шага, как показано ниже:
Шаг 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):
Set
the UIViewControllerBasedStatusBarAppearance
доNO
вInfo.plist
.на
ViewDidLoad
метод или в любом месте, где вы хотите изменить стиль строки состояния:[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
в случае, если ваш UIViewController находится внутри UINavigationController вам придется установить BarStyle:
-[UINavigationBar setBarStyle:UIBarStyleBlack]
оригинальный ответ тут
если у вас есть встроенный навигационный контроллер, созданный через Interface Builder, обязательно установите следующее в классе, который управляет вашим навигационным контроллером:
-(UIStatusBarStyle)preferredStatusBarStyle{ return UIStatusBarStyleLightContent; }
Это должно быть все, что вам нужно.
В AppDelegate.м добавить следующее.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; }
и в файле Plist установите для параметра "внешний вид строки состояния на основе контроллера вида" значение нет.
Просто В Appdelegate
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Ну, это действительно работает как кусок торта для меня.
перейдите в приложение
info.plist
.
- Set
View controller-based status bar appearance
доNO
- 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]; }
Бинго. Это работает на меня.
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/
В Swift 3 очень легко всего за 2 шага. Перейдите к своей информации.plist и изменить ключ
View controller-based status bar appearance
"нет". Затем в Appdelegate просто добавьте эту строку в метод didfinishlaunchingwithoptionsfunc 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:
на
Info.plist
поставитьView controller-based status bar appearance
какNO
в проект, установил:
В ViewDidLoad:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Я думаю, что все ответы на самом деле не указывают на проблему, потому что все они работают в конкретных сценариях. Но если вам нужно охватить все случаи, следуйте пунктам ниже:
в зависимости от того, где вам нужен стиль освещения строки состояния, вы всегда должны иметь в виду эти 3 пункта:
1) Если вам нужна строка состояния на стартовом экране или в других местах, где вы не можете ее контролировать (не в контроллерах вида, а в некоторых элементах/моментах, управляемых системой как экран запуска) Вы переходите к настройкам проекта
2) Если у вас есть контроллер внутри навигационный контроллер Вы можете изменить его в построителе интерфейса следующим образом:
a) выберите Панель навигации навигационного контроллера
b) затем установите стиль панели навигации на "черный", потому что это означает, что у вас будет" черный " - > темный фон под вашей строкой состояния, поэтому он установит строку состояния на белый
или сделать это в коде следующим образом
navigationController?.navigationBar.barStyle = UIBarStyle.Black
3) Если у вас есть только контроллер, который должен иметь свой собственный стиль строки состояния, и он не встроен в какую-либо структуру контейнера в качестве UINavigationController
установите стиль строки состояния в коде для контроллера:
просто называя
[[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