Изменение цвета строки состояния

Я пытаюсь изменить цвет строки состояния как синий или какой-либо другой цвет.

Возможно ли это, или Apple не позволяет?

Ответ 1

ПРИМЕЧАНИЕ. Это решение не работает в iOS 13 и более поздних версиях.

Сначала в Plist установите View controller-based status bar appearance в 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
}

Снимок экрана ниже

enter image description here

Ответ 2

  Нет, это невозможно с готовыми общедоступными API.

Но с выпуском iOS 7 вы можете изменить внешний вид строки состояния. Поэтому я публикую свое решение.

От отдельного контроллера представления, переопределяя preferredStatusBarStyle:

-(UIStatusBarStyle)preferredStatusBarStyle 
{ 
    return UIStatusBarStyleLightContent; 
}

Кроме того, вы можете установить стиль строки состояния, используя метод UIApplication statusBarStyle. Для этого вставьте новый ключ с именем "Просмотр внешнего вида строки состояния на основе контроллера" и установите значение "NO". enter image description here

Отключив "Вид строки состояния на основе контроллера", вы можете установить стиль строки состояния, используя следующий код.

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

В конце измените цвет оттенка свойства UINavigationBar, как показано ниже

[[UINavigationBar appearance] setBarTintColor:[UIColor blueColor]];

Ответ 3


Вы можете установить цвет фона для строки состояния во время запуска приложения или во время 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
    }

}



Вот результат:

enter image description here

Вот Apple Guidelines/Instruction об изменении строки состояния. Only Dark & свет (в то время как & черный) разрешены в строке состояния.

Вот как изменить стиль строки состояния:

Если вы хотите установить стиль строки состояния, уровень приложения, то установите UIViewControllerBasedStatusBarAppearance на NO в вашем файле .plist.

если вы хотите установить стиль строки состояния, на уровне контроллера представления выполните следующие действия:

  1. Установите UIViewControllerBasedStatusBarAppearance на YES в файле .plist, если вам нужно установить стиль строки состояния только на уровне UIViewController.
  2. В viewDidLoad добавить функцию - setNeedsStatusBarAppearanceUpdate

  3. переопределите предпочитаемый элемент StatusBarStyle в вашем контроллере представления.

-

override func viewDidLoad() {
    super.viewDidLoad()
    self.setNeedsStatusBarAppearanceUpdate()
}

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

Установите значение .plist в соответствии с уровнем настройки стиля строки состояния. enter image description here

Ответ 4

Вот мое обходное решение: создать UIView, добавить его в корневой вид контроллера просмотра в качестве фона искусственного фона
1.Создайте UIView

// status bar 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, поэтому вы в безопасности.: -)

Ответ 5

Я сделал это расширение, чтобы изменить цвет строки состояния

public extension UIViewController {
    func setStatusBar(color: UIColor) {
        let tag = 12321
        if let taggedView = self.view.viewWithTag(tag){
            taggedView.removeFromSuperview()
        }
        let overView = UIView()
        overView.frame = UIApplication.shared.statusBarFrame
        overView.backgroundColor = color
        overView.tag = tag
        self.view.addSubview(overView)
    }
}

Вот использование в любом месте viewcontroller:

setStatusBar(color: .red)