У мого додатка темний фон, але в iOS 7 рядок стану став прозорим. Тому я нічого там не бачу, лише зелений індикатор акумулятора в кутку. Як я можу змінити колір тексту рядка статусу на білий, як на головному екрані?
У мого додатка темний фон, але в iOS 7 рядок стану став прозорим. Тому я нічого там не бачу, лише зелений індикатор акумулятора в кутку. Як я можу змінити колір тексту рядка статусу на білий, як на головному екрані?
Відповіді:
Встановіть UIViewControllerBasedStatusBarAppearanceдля YESв .plist файлі.
У viewDidLoadвиконанні a[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 створіть новий швидкий файл під назвою 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())
Крім того, ви можете вимкнути зовнішній вигляд рядка стану на основі контролера перегляду:
View controller-based status bar appearanceдля NOу вашій Info.plist.[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];Примітка. Цей метод застарів у iOS9. Використовуйте preferredStatusBarStyleзамість UIViewController. (див. бібліотеку розробників Apple )
Це можна зробити, не записуючи жодного рядка коду!
Виконайте наступне, щоб зробити текст рядка стану кольором білим у всьому додатку
На вашому проекті пліст- файл:
Transparent black style (alpha of 0.5)NONOUIStatusBarStyleLightContentв plist infoОДНАК там , Transparent Blackякий буде робити те ж трюк :) плюс, вам потрібно додати , View controller-based status bar appearanceяк це не було спочатку , і це все , що вам потрібно , щоб отримати його на роботу :)
<key>UIStatusBarStyle</key> <string>UIStatusBarStyleLightContent</string> <key>UIViewControllerBasedStatusBarAppearance</key> <false/>
Примітка: відповідь на більшу частину не працює для iOS 7/8
В Info.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];
Для цього вам не потрібно робити жодного коду
Вам потрібно додати ключ "Перегляд зовнішнього вигляду рядка стану контролера" у info.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 насінні та iOS7 SDK, випущеному 18 вересня 2013 року (принаймні з навігаційним контролером приховано):
Встановіть the UIViewControllerBasedStatusBarAppearanceна NOв
Info.plist.
У ViewDidLoadспособі чи будь-де, де ви хочете змінити стиль рядка стану:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Якщо ваш UIViewController знаходиться всередині UINavigationController, вам доведеться встановити BarStyle:
-[UINavigationBar setBarStyle:UIBarStyleBlack]
Оригінальний відповідь тут
Якщо у вас є вбудований контролер навігації, створений за допомогою Interface Builder , не забудьте встановити наступне в класі, який управляє вашим навігаційним контролером:
-(UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
Це має бути все, що вам потрібно.
Я використовую Xcode 6 beta 5 для проекту Swift , для програми iOS 7.
Ось що я зробив, і це працює:
info.plist:

У AppDelegate.m додайте наступне.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}
А у файлі Plist встановіть "Перегляд зовнішнього вигляду на основі контролера" на "НІ".
Просто в Appdelegate
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Ну, це справді працює як шматок пирога для мене.
Перейдіть до програми info.plist.
View controller-based status bar appearanceдляNOStatus 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];
}
Бінго. Це працює для мене.
View controller-based status bar appearance equalTo NOбув шматок я пропускав. Спасибі
У Swift 3 дуже легко просто за допомогою 2 кроків. Перейдіть до свого інформаційного списку та змініть ключ 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
}
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у поле Значення.
Щоб встановити глобальний стиль для рядка стану, додайте іншу властивість на вкладці Інформація за допомогою ключа Status bar style, типу Stringта значення Opaque black style.
Ось допис у блозі з трохи докладнішими відомостями та зразком коду:
http://codebleep.com/setting-the-status-bar-text-color-in-ios-7/
Не потрібно робити зайвих, просто введіть цей код у свій 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.
View controller-based status bar appearance = NO
Це задокументовано в посібнику з переходу користувальницького інтерфейсу iOS 7 , до якого потрібен ідентифікатор розробника Apple для прямого доступу. Відповідний уривок:
Оскільки рядок стану прозорий, вид за ним видно наскрізь. [...] Використовуйте
UIStatusBarStyleконстанту, щоб вказати, чи має бути темний або світлий вміст рядка стану:
UIStatusBarStyleDefaultвідображає темний вміст. [...]
UIStatusBarStyleLightContentвідображає світловий вміст. Використовувати, коли темний вміст знаходиться за рядком стану.
Також можливий інтерес:
В iOS 7 ви можете керувати стилем рядка стану від окремого контролера vew та змінювати його під час роботи програми. Щоб увімкнути цю поведінку, додайте
UIViewControllerBasedStatusBarAppearanceключ доInfo.plistфайлу програми та надайте йому значенняYES.
Я напевно рекомендую ознайомитися з документом, до якого, знову ж таки, ви можете отримати доступ зі своїм ідентифікатором розробника Apple.
Ось рекомендації Apple / Інструкція щодо зміни рядка стану. У рядку стану дозволено лише темне та світле (в той час як чорне).
Ось - Як змінити стиль рядка стану:
Якщо ви хочете , щоб стиль набору статусу бару, рівень додатків , а потім встановити UIViewControllerBasedStatusBarAppearanceв NOвашій .plist »файла`.
якщо ви хочете встановити стиль рядка стану, на рівні контролера перегляду виконайте наступні дії:
UIViewControllerBasedStatusBarAppearanceв YESв .plistфайлі, якщо вам необхідно встановити стиль статус бар тільки на рівні UIViewController.У функції viewDidLoad add - 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
}
}
Ось результат:

Я робив деякі речі різні, і це працює на мене.
Не маючи змін у коді, я налаштував свій .plist файл таким чином:
Я сподіваюся, що це допомагає.
Для кожного контролера перегляду я змінюю властивість імітованої метрики "рядок стану" в дошці розкадровки з "висновку" на "світлий вміст"
Якщо ви все ще хочете використовувати View controller-based status bar appearanceв info.plist, встановленому YES, це означає, що ви можете змінити панель стану для кожного контролера перегляду, використовуйте наступне для білого тексту в рядку стану в ViewDidLoad:
[[[self navigationController] navigationBar] setBarStyle:UIBarStyleBlackTranslucent];
у info.plist встановіть значення поля НІ Перегляд зовнішнього вигляду рядка стану на основі контролера та встановіть світло в стилі панелі стану в цільовому> загальному налаштуваннях.
Дозвольте дати повну відповідь на ваше запитання. Змінити колір тексту рядка стану дуже просто, але це трохи заплутано в iOS 7, спеціально для новачків.
Якщо ви намагаєтесь змінити колір із чорного на білий у дошці сповіщень, вибравши контролер перегляду та перейшовши на імітацію метрики праворуч, це не спрацює, і я не знаю чому. Він повинен працювати, змінюючи так, але будь-яким чином.
По-друге, ви не знайдете властивість UIViewControllerBasedStatusBarAppearance у своєму списку, але за замовчуванням його немає. Ви повинні додати його самостійно, натиснувши кнопку +, а потім встановити її на НІ.
Колір тексту рядка стану ios 7
Нарешті, вам потрібно перейти у файл AppDelegate.m і додати наступне у методі didFinishLaunchingWithOptions, додати такий рядок:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Це змінить колір на білий для всіх контролерів перегляду. Сподіваюся, це допомагає!