У мого додатка темний фон, але в 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)
NO
NO
UIStatusBarStyleLightContent
в 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
дляNO
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];
}
Бінго. Це працює для мене.
View controller-based status bar appearance equal
To 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];
Це змінить колір на білий для всіх контролерів перегляду. Сподіваюся, це допомагає!