web-dev-qa-db-ja.com

ステータスバーの色の変更

ステータスバーの色を青などの色に変更しようとしています。

これは可能ですか、またはApple許可しませんか?

11
Tyler Rutt

注:このソリューションは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

14
user3182143

いいえ、既製のパブリックAPIでは不可能です。

ただし、iOS 7のリリースにより、ステータスバーの外観を変更できるようになりました。したがって、回避策を投稿しています。

個々のView Controllerから、preferredStatusBarStyleをオーバーライドして:

-(UIStatusBarStyle)preferredStatusBarStyle 
{ 
    return UIStatusBarStyleLightContent; 
}

または、UIApplication statusBarStyleメソッドを使用してステータスバーのスタイルを設定できます。これを行うには、「View controller-based status bar Appearance」という名前の新しいキーを挿入し、値をNOに設定します。 enter image description here

「View Controllerベースのステータスバーの外観」を無効にすることで、次のコードを使用してステータスバーのスタイルを設定できます。

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

最後に、UINavigationBarプロパティの色合いを次のように変更します

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


アプリケーションの起動時またはView Controllerの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 ステータスバーの変更についてです。ステータスバーで許可されるのは、暗くて明るい(白と黒)だけです。

ここにある-ステータスバーのスタイルを変更する方法:

ステータスバーのスタイル、アプリケーションレベルを設定する場合は、 `.plist 'ファイルでUIViewControllerBasedStatusBarAppearanceNOに設定します。

ビューコントローラーレベルでステータスバーのスタイルを設定する場合は、次の手順を実行します。

  1. UIViewControllerレベルでのみステータスバーのスタイルを設定する必要がある場合は、.plistファイルでUIViewControllerBasedStatusBarAppearanceYESに設定します。
  2. ViewDidLoadで関数を追加-setNeedsStatusBarAppearanceUpdate

  3. view ControllerのpreferredStatusBarStyleをオーバーライドします。

-

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

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

ステータスバースタイルのセットアップレベルに従って.plistの値を設定します。 enter image description here

6
Krunal

回避策は次のとおりです:UIViewを作成し、それをView Controllerのルートビューに人為的なステータスバーの背景として追加します
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.View Controllerのルートビューに追加します

// 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を使用しないため、安全です。 :-)

4
steveluoxin

ステータスバーの色を変更するためにこの拡張機能を作成しました

_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)

1
Rifat Monzur