Как изменить цвет текста строки состояния в iOS
Мое приложение имеет темный фон, но в iOS 7 панель состояния стала прозрачной. Поэтому я ничего не вижу, только зеленый индикатор батареи в углу. Как изменить цвет текста строки состояния на белый, как на главном экране?
Ответы
Ответ 1
-
Установите для 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
}
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())
Ответ 2
В качестве альтернативы вы можете отключить внешний вид строки состояния на панели управления:
- Установите
View controller-based status bar appearance
в NO
в Info.plist
.
- Вызов
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Примечание. Этот метод устарел в iOS9. Вместо этого используйте preferredStatusBarStyle
на UIViewController. (см. Apple Developer Library)
Ответ 3
Вы можете сделать это, не написав ни одной строки кода!
Сделайте следующее, чтобы цвет текста в строке состояния был белым по всему приложению.
В файле проекта plist:
- Стиль строки состояния:
Transparent black style (alpha of 0.5)
- Просмотр состояния строки состояния на основе контроллера:
NO
- Строка состояния изначально скрыта:
NO
Ответ 4
Примечание. Большинство исправленных ответов не работают для iOS 7/8
В Info.plist установите "Просмотр строки состояния на основе контроллера" как NO
В AppDelegate добавьте
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
к
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
......
...
}
Это решение работает для iOS 7/8
Ответ 5
Для меня ничего не случилось с использованием всех вещей в других ответах (и из других источников/документации). Что помогло установить стиль панели навигации "Черный" в XIB. Это изменило текст на белый без какого-либо кода.
Ответ 6
Ничего из этого не сработало для меня, так что вот рабочее решение...
В Info.plist
добавьте строку:
UIViewControllerBasedStatusBarAppearance
и установите значение NO
.
Затем в AppDelegate в didFinishLaunchingWithOptions
добавьте следующие строки:
[application setStatusBarHidden:NO];
[application setStatusBarStyle:UIStatusBarStyleLightContent];
Ответ 7
Вам не нужно делать какой-либо код для этого
В info.plist вам нужно добавить "Просмотреть внешний вид строки состояния контроллера на основе контроллера":
& установите для своего значения значение Boolean и значение NO.
Затем щелкните по настройкам проекта, затем щелкните вкладку "Общие" и в разделе "Информация о развертывании" установите стиль предпочтительной строки состояния в .Light следующим образом:
Вот оно.
Ответ 8
Всего два шага:
Шаг 1:
На вкладке "Информация" project target
"Добавить строку:
UIViewControllerBasedStatusBarAppearance
, установите значение NO
.
Шаг 2:
В проекте AppDelegate.m
:
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
…
[application setStatusBarStyle:UIStatusBarStyleLightContent];
…
}
Ответ 9
Это работает в Golden Master iOS 7 и Xcode 5 семян GM и iOS7 SDK, выпущенных 18 сентября 2013 года (по крайней мере, с навигационным контроллером):
-
Установите the UIViewControllerBasedStatusBarAppearance
в NO
в
Info.plist
.
-
В методе ViewDidLoad
или где угодно, где вы хотите изменить
стиль строки состояния:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Ответ 10
Если ваш UIViewController находится внутри UINavigationController, вам нужно будет установить BarStyle:
-[UINavigationBar setBarStyle:UIBarStyleBlack]
Оригинальный ответ здесь
https://devforums.apple.com/message/844264#844264
Ответ 11
Если у вас встроенный контроллер навигации, созданный с помощью Interface Builder, не забудьте установить следующее в классе, управляющем вашим контроллером навигации:
-(UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
Это должно быть все, что вам нужно.
Ответ 12
Я использую Xcode 6 beta 5 в проекте Swift для приложения iOS 7.
Вот что я сделал, и это работает:
info.plist:
Ответ 13
В AppDelegate.m добавьте следующее.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}
И в файле Plist установите "Просмотр состояния панели управления на основе контроллера" на NO.
Ответ 14
Ну, это действительно работает как кусок пирога для меня.
Откройте приложение 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];
}
Бинго. Это работает для меня.
Ответ 15
Просто в Appdelegate
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Ответ 16
-
Перейдите к Project
→ Target
,
-
Затем установите Status Bar Style
в Light
. Это делает статус-бар белым с экрана запуска.
-
Затем установите View controller-based status bar appearance
равным NO
в Info.plist
.
Ответ 17
В 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
}
Ответ 18
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/
Ответ 19
Ответ обновлен для Xcode GM Seed:
Ответ 20
Не нужно делать лишние, просто напишите этот код в своем viewController и получите цвет статуса белым цветом
- (UIStatusBarStyle)preferredStatusBarStyle{return UIStatusBarStyleLightContent;}
Ответ 21
Я думаю, что все ответы на самом деле не указывают на проблему, потому что все они работают в конкретных сценариях. Но если вам нужно покрыть все случаи, выполните следующие пункты:
В зависимости от того, где вам нужен стиль строки состояния, вы всегда должны иметь в виду эти 3 балла:
1) Если вам нужна строка состояния на экране запуска или в других местах, где вы не можете управлять им (не на контроллерах, а на некоторых элементах/моментах, управляемых системой, таких как экран запуска)
Вы переходите к настройкам своего проекта
2), если у вас есть контроллер внутри контроллера навигации
Вы можете изменить его в построителе интерфейса следующим образом:
a) Выберите навигационную панель вашего навигационного контроллера
b) Затем установите стиль панели навигации на "Черный", потому что это означает, что у вас будет "черный" → темный фон в строке состояния, поэтому он установит строку состояния в белый цвет
Или сделайте это в коде следующим образом
navigationController?.navigationBar.barStyle = UIBarStyle.Black
3) Если у вас есть только контроллер, который должен иметь собственный стиль строки состояния, и он не встроен в какую-либо структуру контейнера в качестве UINavigationController
Задайте стиль строки состояния в коде для контроллера:
Ответ 22
Просто позвонив
[[UINavigationBar appearance] setBarStyle:UIBarStyleBlack];
в
-(BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
}
метод моего AppDelegate
отлично работает для меня в iOS7.
Ответ 23
Это описано в Руководстве по переходу на iOS 7 UI, для которого вам необходим идентификатор разработчика Apple для прямого доступа. Соответствующая выдержка:
Поскольку строка состояния прозрачна, просмотр позади нее показывает. [...] Используйте константу UIStatusBarStyle
, чтобы указать, должно ли содержимое панели состояния быть темным или светлым:
UIStatusBarStyleDefault
отображает темное содержимое. [...]
UIStatusBarStyleLightContent
отображает световой контент. Используйте, когда темное содержимое находится за панель состояния.
Также возможно интерес:
В iOS 7 вы можете управлять стилем строки состояния с отдельного контроллера vew и изменять его во время работы приложения. Чтобы принять участие в этом поведении, добавьте ключ UIViewControllerBasedStatusBarAppearance
в файл приложения Info.plist
и присвойте ему значение YES
.
Я определенно рекомендую просмотреть документ, который, опять же, вы можете получить с помощью идентификатора разработчика Apple.
Ответ 24
Если вы все еще хотите использовать View controller-based status bar appearance
в инфо .plist, чтобы установить значение YES, это означает, что вы можете изменить строку состояния для каждого контроллера вида, используйте следующее для белого текста в строке состояния в ViewDidLoad:
[[[self navigationController] navigationBar] setBarStyle:UIBarStyleBlackTranslucent];
Ответ 25
Если вы хотите получить тот же результат с помощью Swift, вы можете использовать этот код в файле AppDelegate.swift:
UINavigationBar.appearance().barStyle = .BlackTranslucent
И текст вашей строки состояния будет белым:-)!
Ответ 26
Вот Apple Guidelines/Инструкция по изменению строки состояния. Только темные и светлые (в то время как и черные) разрешены в строке состояния.
Вот как изменить стиль строки состояния:
Если вы хотите установить стиль строки состояния, уровень приложения, то установите для UIViewControllerBasedStatusBarAppearance
значение NO
в вашем файле .plist.
если вы хотите установить стиль строки состояния, на уровне контроллера представления выполните следующие действия:
- Установите для
UIViewControllerBasedStatusBarAppearance
значение YES
в файле .plist
, если вам нужно установить стиль строки состояния только на уровне UIViewController. -
В viewDidLoad добавить функцию - setNeedsStatusBarAppearanceUpdate
-
переопределите предпочитаемый элемент 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
}
}
Вот результат:
Ответ 27
Я сделал несколько вещей, и он работает для меня.
Без изменений в коде я установил свой файл .plist следующим образом:
- Просмотр состояния строки состояния на основе контроллерa > NO
- Стиль строки состояния > UIStatusBarStyleLightContent (простая строка)
Надеюсь, это поможет.
Изменить
Для каждого контроллера просмотра я изменяю свойство "Синтаксис метрики" в раскадровке "из строки" с "выводится" на "Легкий контент"
Ответ 28
В Plist добавьте это:
- Стиль строки состояния:
UIStatusBarStyleLightContent
- Просмотр состояния строки состояния на основе контроллера:
NO
Ответ 29
в файле info.plist установите значение поля NO Просмотрите внешний вид строки состояния на основе контроллера и установите статусбара стиль света в цели > общие настройки.
Ответ 30
Позвольте мне дать вам полный ответ на ваш вопрос. Изменение цвета текста в строке состояния очень просто, но его немного запутывает в iOS 7 специально для новичков.
Если вы пытаетесь изменить цвет с черного на белый в Storyboard, выбрав контроллер вида и перейдя на Simulated Metrics с правой стороны, это не сработает, и я не знаю, почему. Он должен работать, изменяясь таким образом, но любым способом.
Во-вторых, вы не найдете свойство UIViewControllerBasedStatusBarAppearance в своем plist, но по умолчанию его не существует. Вы должны добавить его самостоятельно, нажав на кнопку +, а затем установите значение НЕТ.
Цвет текста в строке состояния ios 7
Наконец, вам нужно перейти в файл AppDelegate.m и добавить следующее в метод didFinishLaunchingWithOptions, добавить следующую строку:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Это изменит цвет на белый для всех ваших контроллеров. Надеюсь, это поможет!