У моего приложения темный фон, но в iOS 7 строка состояния стала прозрачной. Так что я ничего не вижу там, только зеленый индикатор батареи в углу. Как изменить цвет текста строки состояния на белый, как на домашнем экране?
У моего приложения темный фон, но в iOS 7 строка состояния стала прозрачной. Так что я ничего не вижу там, только зеленый индикатор батареи в углу. Как изменить цвет текста строки состояния на белый, как на домашнем экране?
Ответы:
Установите 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())
Кроме того, вы можете отказаться от внешнего вида строки состояния на основе контроллера представления:
View controller-based status bar appearance
для NO
в вашей Info.plist
.[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Примечание: этот метод устарел в iOS9. Используйте preferredStatusBarStyle
вместо этого на UIViewController. (см. Apple Developer Library )
Вы можете сделать это без написания какой-либо строки кода!
Выполните следующие действия, чтобы цвет текста в строке состояния стал белым во всем приложении.
На вашем проекте plist файл:
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 следующим образом:
& установить его тип значения на Boolean и значение на NO. Затем нажмите на настройки проекта, затем нажмите вкладку «Общие» и в разделе «Информация о развертывании» установите предпочтительный стиль строки состояния .Light следующим образом:
Это оно.
Всего два шага, как показано ниже:
Шаг 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 года (по крайней мере, со скрытым навигационным контроллером):
Установите 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 установите для параметра «Просмотр внешнего вида строки состояния на основе контроллера» значение NO.
Просто в приложении
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Ну, это действительно работает как кусок пирога для меня.
Перейти к вашему приложению 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];
}
Бинго. Это работает для меня.
View controller-based status bar appearance equal
To NO
был кусок я пропускал. Спасибо
В 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
}
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/
Не нужно делать ничего лишнего, просто напишите этот код в вашем viewController и получите строку состояния белого цвета.
- (UIStatusBarStyle)preferredStatusBarStyle{return UIStatusBarStyleLightContent;}
Обновлен ответ для Xcode GM Seed:
В Info.plist
положить View controller-based status bar appearance
вNO
В проекте установите:
В ViewDidLoad:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Я думаю, что все ответы на самом деле не указывают на проблему, потому что все они работают в определенных сценариях. Но если вам нужно охватить все случаи, следуйте пунктам ниже:
В зависимости от того, где вам нужен стиль освещения в строке состояния, вы всегда должны иметь в виду следующие 3 момента:
1) Если вам нужна строка состояния на экране запуска или в других местах, где вы не можете ее контролировать (не в контроллерах представления, а в некоторых управляемых системой элементах / моментах, таких как Launch Screen), вы переходите к настройкам своего проекта
2) если у вас есть контроллер внутри контроллера навигации, вы можете изменить его в конструкторе интерфейса следующим образом:
а) Выберите панель навигации вашего контроллера навигации
б) Затем установите стиль панели навигации на «Черный», потому что это означает, что у вас будет «черный» -> темный фон под строкой состояния, поэтому он установит для строки состояния белый цвет.
Или сделать это в коде следующим образом
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 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
}
}
Вот результат:
Я сделал некоторые вещи по-другому, и это работает для меня.
Без изменений в коде я настроил свой файл .plist следующим образом:
Я надеюсь, что это помогает.
Для каждого контроллера представления я изменяю свойство Simulated Metrics "строки состояния" в раскадровке с "выведенного" на "Легкое содержимое"
Если вы все еще хотите использовать View controller-based status bar appearance
в файле info.plist значение YES, что означает, что вы можете изменять строку состояния для каждого контроллера представления, используйте следующее для белого текста в строке состояния в ViewDidLoad:
[[[self navigationController] navigationBar] setBarStyle:UIBarStyleBlackTranslucent];
в info.plist установите значение поля NO. Просмотрите внешний вид строки состояния на основе контроллера и установите индикатор стиля строки состояния в target> general setting.
Позвольте мне дать вам полный ответ на ваш вопрос. Изменить цвет текста в строке состояния очень просто, но в iOS 7 это немного сбивает с толку, особенно для новичков.
Если вы пытаетесь изменить цвет с черного на белый в раскадровке, выбрав контроллер представления и перейдя к симулированным метрикам с правой стороны, это не сработает, и я не знаю почему. Это должно работать, изменяя, как это, но как угодно.
Во-вторых, вы не найдете свойство UIViewControllerBasedStatusBarAppearance в вашем списке, но по умолчанию его там нет. Вы должны добавить его самостоятельно, нажав на кнопку +, а затем установите его на NO.
Цвет текста в строке состояния ios 7
Наконец, вам нужно перейти в файл AppDelegate.m и добавить следующее в метод didFinishLaunchingWithOptions, добавив следующую строку:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Это изменит цвет на белый для всех ваших контроллеров представления. Надеюсь это поможет!