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

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

возможно ли это, или 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
}

выходной скриншот ниже

enter image description here


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

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

от отдельного контроллера вида путем переопределения preferredStatusBarStyle:

-(UIStatusBarStyle)preferredStatusBarStyle 
{ 
    return UIStatusBarStyleLightContent; 
}

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

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

[[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
    }

}



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

enter image description here

здесь Руководство/Инструкция Apple об изменении строки состояния. Только Dark & light (while & black) разрешены в строке состояния.

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

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

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

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

  3. переопределить preferredStatusBarStyle в вашем представлении контроллер.

-

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

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

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


вот мое решение: создать 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, поэтому вы в безопасности. :-)