ステータスバーの色を青などの色に変更しようとしています。
これは可能ですか、またはApple許可しませんか?
注:このソリューションは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
}
出力のスクリーンショットは以下です
いいえ、既製のパブリックAPIでは不可能です。
ただし、iOS 7
のリリースにより、ステータスバーの外観を変更できるようになりました。したがって、回避策を投稿しています。
個々のView Controllerから、preferredStatusBarStyle
をオーバーライドして:
-(UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
または、UIApplication statusBarStyle
メソッドを使用してステータスバーのスタイルを設定できます。これを行うには、「View controller-based status bar Appearance」という名前の新しいキーを挿入し、値をNOに設定します。
「View Controllerベースのステータスバーの外観」を無効にすることで、次のコードを使用してステータスバーのスタイルを設定できます。
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
最後に、UINavigationBar
プロパティの色合いを次のように変更します
[[UINavigationBar appearance] setBarTintColor:[UIColor blueColor]];
アプリケーションの起動時または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
}
}
結果は次のとおりです。
Apple Guidelines/Instruction ステータスバーの変更についてです。ステータスバーで許可されるのは、暗くて明るい(白と黒)だけです。
ここにある-ステータスバーのスタイルを変更する方法:
ステータスバーのスタイル、アプリケーションレベルを設定する場合は、 `.plist 'ファイルでUIViewControllerBasedStatusBarAppearance
をNO
に設定します。
ビューコントローラーレベルでステータスバーのスタイルを設定する場合は、次の手順を実行します。
.plist
ファイルでUIViewControllerBasedStatusBarAppearance
をYES
に設定します。ViewDidLoadで関数を追加-setNeedsStatusBarAppearanceUpdate
view ControllerのpreferredStatusBarStyleをオーバーライドします。
-
override func viewDidLoad() {
super.viewDidLoad()
self.setNeedsStatusBarAppearanceUpdate()
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
ステータスバースタイルのセットアップレベルに従って.plistの値を設定します。
回避策は次のとおりです: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を使用しないため、安全です。 :-)
ステータスバーの色を変更するためにこの拡張機能を作成しました
_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)