Изменение цвета строки состояния
Я пытаюсь изменить цвет строки состояния на синий или какой-либо другой цвет.
возможно ли это, или Apple не позволяет?
4 ответов
первый в наборе Plist View controller-based status bar appearance
to NO
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
if statusBar.responds(to:#selector(setter: UIView.backgroundColor)) {
statusBar.backgroundColor = UIColor.blue
}
UIApplication.shared.statusBarStyle = .lightContent
return true
}
выходной скриншот ниже
нет, это невозможно с готовыми общедоступными API.
но с выходом iOS 7
, вы можете изменить внешний вид строки состояния. Поэтому я размещаю свой обходной путь.
от отдельного контроллера вида путем переопределения preferredStatusBarStyle
:
-(UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
кроме того, вы можете установить статус бар с помощью UIApplication statusBarStyle
метод. Для этого вставьте новый ключ с именем " Просмотр состояния на основе контроллера внешний вид бара" и установите значение нет.
отключив "внешний вид строки состояния на основе контроллера вида", вы можете установить стиль строки состояния, используя следующий код.
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
в конце измените UINavigationBar
свойство оттенок цвета, как показано ниже
[[UINavigationBar appearance] setBarTintColor:[UIColor blueColor]];
Вы можете установить цвет фона для строки состояния во время запуска приложения или во время 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
}
}
Вот результат:
здесь Руководство/Инструкция Apple об изменении строки состояния. Только Dark & light (while & black) разрешены в строке состояния.
вот - как изменить стиль строки состояния:
если вы хотите установите стиль строки состояния, уровень приложения, затем установите UIViewControllerBasedStatusBarAppearance
to NO
в свой `.файл plist'.
если вы хотите установить стиль строки состояния, на уровне контроллера вида выполните следующие действия:
- установить
UIViewControllerBasedStatusBarAppearance
toYES
на.plist
файл, если вам нужно установить стиль строки состояния только на уровне UIViewController. в функции добавления viewDidLoad -
setNeedsStatusBarAppearanceUpdate
переопределить preferredStatusBarStyle в вашем представлении контроллер.
-
override func viewDidLoad() {
super.viewDidLoad()
self.setNeedsStatusBarAppearanceUpdate()
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
установить значение .plist в соответствии с уровнем настройки стиля строки состояния.
вот мое решение: создать UIView
, добавьте его в корневой вид контроллера вида в качестве искусственного фона строки состояния
1.Создать UIView
// status bar's height is 20.0pt
CGRect frame = CGRectMake(0.0, 0.0, [UIScreen mainScreen].bounds.size.width, 20.0);
UIView *fakeStatusBarBG = [[UIView alloc] initWithFrame:frame];
fakeStatusBarBG.backgroundColor = [UIColor yourColor];
2.Добавьте его в корневой вид контроллера вида
// self is your view controller, make sure fakeStatusBarBG is the top subview in your view hierarchy
[self.view insertSubview:fakeStatusBarBG aboveSubview:yourTopSubview];
там свои идут.
3.(Дополнительно)измените цвет содержимого в строке состояния, только белый или черный.
- (UIStatusBarStyle)preferredStatusBarStyle
{
if (youWantWhiteColor)
{
return UIStatusBarStyleLightContent;
}
return UIStatusBarStyleDefault;
}
этот обходной путь не использует частный API, поэтому вы в безопасности. :-)