J'essaie de changer la couleur de la barre d'état pour aimer un bleu ou une autre couleur.
Est-ce possible ou Apple ne le permet-il pas?
REMARQUE: cette solution échoue sous iOS 13 et versions ultérieures.
Premier ensemble de 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
}
La capture d'écran de sortie est ci-dessous
Non, ce n'est pas possible avec des API publiques prêtes à l'emploi.
Mais avec la sortie de iOS 7
, vous pouvez modifier l'apparence de la barre d'état. Par conséquent, je publie ma solution de contournement.
Depuis un contrôleur de vue individuel en remplaçant le preferredStatusBarStyle
:
-(UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
Vous pouvez également définir le style de la barre d’état à l’aide de UIApplication statusBarStyle
méthode. Pour ce faire, insérez une nouvelle clé nommée "Afficher l'apparence de la barre d'état basée sur le contrôleur" et définissez la valeur sur NON.
En désactivant "Afficher l'apparence de la barre d'état basée sur le contrôleur", vous pouvez définir le style de la barre d'état à l'aide du code suivant.
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
À la fin, changez la couleur de teinte de la propriété UINavigationBar
comme ci-dessous
[[UINavigationBar appearance] setBarTintColor:[UIColor blueColor]];
Vous pouvez définir la couleur d'arrière-plan de la barre d'état lors du lancement de l'application ou pendant viewDidLoad de votre contrôleur de vue.
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
}
}
Voici le résultat:
Voici Apple Guidelines/Instruction sur le changement de la barre d'état. Seuls Dark & light (while & black) sont autorisés dans la barre d'état.
Voici - Comment changer le style de la barre d'état:
Si vous souhaitez définir le style de la barre d'état, au niveau de l'application, définissez UIViewControllerBasedStatusBarAppearance
sur NO
dans votre fichier `.plist '.
si vous souhaitez définir le style de la barre d'état, au niveau du contrôleur de vue, procédez comme suit:
UIViewControllerBasedStatusBarAppearance
sur YES
dans .plist
fichier, si vous devez définir le style de la barre d'état au niveau UIViewController uniquement.Dans la fonction d'ajout de viewDidLoad - setNeedsStatusBarAppearanceUpdate
remplacez PreferredStatusBarStyle dans votre contrôleur de vue.
-
override func viewDidLoad() {
super.viewDidLoad()
self.setNeedsStatusBarAppearanceUpdate()
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
Définissez la valeur de .plist en fonction du niveau de configuration du style de la barre d'état.
Voici ma solution: créez un UIView
, ajoutez-le à votre vue racine du contrôleur de vue comme arrière-plan artificiel de la barre d'état
1.Créez un 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.Ajoutez-le à la vue racine de votre contrôleur de vue
// self is your view controller, make sure fakeStatusBarBG is the top subview in your view hierarchy
[self.view insertSubview:fakeStatusBarBG aboveSubview:yourTopSubview];
Voilà.
3. (Supplémentaire) Modifiez la couleur du contenu dans la barre d'état, uniquement blanc ou noir.
- (UIStatusBarStyle)preferredStatusBarStyle
{
if (youWantWhiteColor)
{
return UIStatusBarStyleLightContent;
}
return UIStatusBarStyleDefault;
}
Cette solution de contournement n'utilise pas d'API privée, vous êtes donc en sécurité.: -)
J'ai fait cette extension pour changer la couleur de la barre d'état
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)
}
}
Voici une utilisation n'importe où dans viewcontroller:
setStatusBar(color: .red)