Как изменить цвет текста строки состояния в iOS
мое приложение имеет темный фон, но в iOS 7 строка состояния стала прозрачной. Так что я ничего не вижу, только зеленый индикатор батареи в углу. Как изменить цвет текста строки состояния на белый, как на главном экране?
30 ответов
установить
UIViewControllerBasedStatusBarAppearance
toYES
в рамках .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 в:
- стиль строки состояния:
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. Это изменило текст на белый без какого-либо кода вообще.
ничего из этого не сработало для меня, поэтому вот рабочее решение...
на Info.plist
добавьте строку:
UIViewControllerBasedStatusBarAppearance
и установите значение NO
.
затем в AppDelegate в didFinishLaunchingWithOptions
добавить эти строки:
[application setStatusBarHidden:NO];
[application setStatusBarStyle:UIStatusBarStyleLightContent];
вам не нужно делать каких-либо код для этого
вам нужно добавить ключ" просмотр внешнего вида строки состояния на основе контроллера " в info.plist следующим образом:
& установить его тип значения в Boolean & значение NO. Затем нажмите "параметры проекта", затем перейдите на вкладку "Общие" и в разделе "Сведения о развертывании" установите предпочтительный стиль строки состояния .Свет следующим образом:
вот и все.
всего два шага, как показано ниже:
Шаг 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 года (по крайней мере, со скрытым навигационным контроллером):
Set
the UIViewControllerBasedStatusBarAppearance
доNO
вInfo.plist
.на
ViewDidLoad
метод или где угодно, где вы хотите изменить статус бар в стиле :[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
если ваш UIViewController находится внутри UINavigationController, вам нужно будет установить BarStyle:
-[UINavigationBar setBarStyle:UIBarStyleBlack]
оригинальный ответ тут
если у вас есть встроенный навигационный контроллер, созданный через Интерфейс Построителя, обязательно установите следующее в классе, который управляет вашим навигационным контроллером:
-(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
toNO
- 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-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/
В 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:
на
Info.plist
поставитьView controller-based status bar appearance
asNO
-
в проект, установил:
-
В ViewDidLoad:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Я думаю, что все ответы на самом деле не указывают на проблему, потому что все они работают в определенных сценариях. Но если вам нужно охватить все случаи, следуйте указаниям ниже:
в зависимости от того, где вам нужен световой стиль строки состояния, вы всегда должны иметь в виду эти 3 точки:
1) Если вам нужна строка состояния на экране запуска или в других местах, где вы не можете ее контролировать (не в контроллерах вида, а в некоторых элементах/моментах, контролируемых системой как экран запуска) Перейдите в настройки проекта
2) Если у вас есть контроллер внутри навигационный контроллер Вы можете изменить его в построителе интерфейса следующим образом:
a) выберите Панель навигации навигационного контроллера
b) затем установите стиль панели навигации на "черный", потому что это означает, что у вас будет "черный" -> темный фон под вашей строкой состояния, поэтому он установит строку состояния в white
или сделать это в коде следующим образом
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
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