Ich habe viele Möglichkeiten ausprobiert, um den Statusleistenstil festzulegen (Standard oder Lichtinhalt), kann ihn jedoch nicht auf Basis eines View-Controllers zum Laufen bringen. Ich kann den Statusleistenstil nur für die gesamte App festlegen.
Hat jemand einen Hinweis?
Ich habe es versucht UIViewControllerBasedStatusBarAppearance
und
-(UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
Diese Methoden funktionieren jedoch nicht.
ios
cocoa-touch
Van Du Tran
quelle
quelle
Antworten:
Hast du das versucht?
Setzen Sie in Ihrer Info.plist auf "Controller-basiertes Erscheinungsbild der Statusleiste anzeigen " (
UIViewControllerBasedStatusBarAppearance
)YES
. (YES
ist die Standardeinstellung, daher können Sie diesen Wert auch einfach aus Ihrer Liste streichen.)Rufen Sie in Ihrer viewDidLoad-Methode auf
[self setNeedsStatusBarAppearanceUpdate]
.Implementieren Sie
preferredStatusBarStyle
und geben Sie den gewünschten Statusleistenstil für diesen Ansichtscontroller zurück.- (UIStatusBarStyle) preferredStatusBarStyle { return UIStatusBarStyleLightContent; }
quelle
Wenn sich Ihr View Controller in einem eigenständigen UINavigationController befindet und nicht Teil eines Storyboard-basierten UINavigationControllers ist, schlagen hier vor allem Methoden fehl. Ich bin auf diese Situation gestoßen und habe dann, um die Statusleiste auf Lichtstil zu setzen, folgendes verwendet
[self.navigationController.navigationBar setBarStyle:UIBarStyleBlack];
Das hat bei mir perfekt funktioniert.
quelle
UINavigationBar.barStyle
überschreibtpreferredStatusBarStyle
. Egal , wie Sie gesetztpreferredStatusBarStyle
, ein verdammt `UINavigationBar.setBarStyle‘ übernimmt alles.BEARBEITEN: Diese Lösung ist unter iOS 9 veraltet. Bitte wählen Sie eine der anderen Antworten.
Mit der
UIViewControllerBasedStatusBarAppearance
Einstellung auf NEIN konnte ich den Stil auf weißen Text einstellen, indem ich Folgendes verwendete:[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleBlackTranslucent;
Dies liegt daran, dass die Textfarbe in diesem Stil unter iOS 6 und darunter weiß war.
UPDATE: Laut @jowie können Sie das unter iOS8 versuchen:
[UIApplication sharedApplication].statusBarStyle = UIBarStyleBlack;
quelle
UIBarStyleBlack
.In Swift konnte ich dies tun, indem ich schrieb:
let tbc : UITabBarController = self.window?.rootViewController as UITabBarController var moreViewController : UINavigationController = tbc.moreNavigationController moreViewController.navigationBar.barStyle = UIBarStyle.Black
Grundsätzlich interessiert Sie die letzte Zeile.
Dies führte dazu, dass die Registerkartenleiste in Weiß geändert wurde:
Beachten Sie, dass ich nichts geändert habe
Info.plist
, um dieses Ergebnis zu erzielen.Weitere Informationen zum Ändern
Navigation Status Bar
finden Sie unter folgendem Link: http://www.appcoda.com/customize-navigation-status-bar-ios-7/quelle
Geben Sie in der viewDidLoad-Methode Folgendes ein:
Ziel c
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; [self setNeedsStatusBarAppearanceUpdate];
Schnell
UIApplication.shared.statusBarStyle = .lightContent self.setNeedsStatusBarAppearanceUpdate()
quelle
AppDelegate
) oder pro Ansichts-Controller sein.Ich wette, Sie haben Ihren View Controller in einen Navigationscontroller eingebettet. Um zu vermeiden, dass der Stil der Navigationsleiste für die
.Black
Verwendung dieser Unterklasse festgelegt wird:class YourNavigationController: UINavigationController { override func childViewControllerForStatusBarStyle() -> UIViewController? { return topViewController } }
quelle
Schnell:
let tbc : UITabBarController = self.window?.rootViewController as UITabBarController var moreViewController : UINavigationController = tbc.moreNavigationController moreViewController.navigationBar.barStyle = UIBarStyle.Black
Ziel c:
Hängen Sie dies an die
controller.m
Datei viewDidLoad-Methode an:[self setNeedsStatusBarAppearanceUpdate].
Implementieren Sie dann diese Methode in derselben
controller.m
Datei:- (UIStatusBarStyle) preferredStatusBarStyle { return UIStatusBarStyleLightContent; }
Offizielle Dokumente:
https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/TransitionGuide/Bars.html
Artikel, den ich in meinem Blog geschrieben habe:
http://www.ryadel.com/2015/03/04/xcode-set-status-bar-style-and-color-in-objective-c/
quelle
Im ViewController möchten Sie die Farbe der Statusleiste ändern
- (void) viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault]; } - (void) viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; }
quelle
Schnelle Erweiterung dafür, weil ich immer vergesse, wie das funktioniert
extension UIViewController { // utility to set the status bar appearance // Note: Make sure "View controller-based status bar appearance" is set to NO in your target settings or this won't work func setStatusBarForDarkBackground(dark: Bool) { UIApplication.sharedApplication().statusBarStyle = dark ? .LightContent : .Default setNeedsStatusBarAppearanceUpdate() } }
quelle
Xcode 10.3,
In iPhone 8 12.4 Simulator ist es OK.
In iPhone X 12.4 Simulator habe ich alles oben versucht, nicht OK.
Dann füge ich es von Hand hinzu, Statusleiste besteht aus Zeit, Batterie, Handy.
StatusBarView
class StatusBottomView: UIView { private var batteryView:BatteryView! private var timeLabel:UILabel! private var timer:Timer? override init(frame: CGRect) { super.init(frame: frame) addSubviews() } private func addSubviews() { batteryView = BatteryView() batteryView.tintColor = UIColor.blue addSubview(batteryView) timeLabel = UILabel() timeLabel.textAlignment = .center timeLabel.font = UIFont.systemFont(ofSize: 12) timeLabel.textColor = UIColor.blue addSubview(timeLabel) didChangeTime() addTimer() } override func layoutSubviews() { super.layoutSubviews() let h = frame.size.height let x: CGFloat = 80 batteryView.frame.origin = CGPoint(x: ScreenHeight - x - DZMBatterySize.width, y: (h - DZMBatterySize.height) / 2) timeLabel.frame = CGRect(x: x, y: 0, width: 50, height: h) } // MARK: -- Timer func addTimer() { if timer == nil { timer = Timer.scheduledTimer(timeInterval: 15, target: self, selector: #selector(didChangeTime), userInfo: nil, repeats: true) RunLoop.current.add(timer!, forMode: .common) } } func removeTimer() { if timer != nil { timer!.invalidate() timer = nil } } @objc func didChangeTime() { timeLabel.text = TimerString("HH:mm") batteryView.batteryLevel = UIDevice.current.batteryLevel } }
BatteryLevelView
class BatteryView: UIImageView { override var tintColor: UIColor! { didSet{ batteryLevelView.backgroundColor = tintColor } } /// BatteryLevel var batteryLevel:Float = 0 { didSet{ setNeedsLayout() } } /// BatteryLevelView private var batteryLevelView:UIView! convenience init() { self.init(frame: CGRect(x: 0, y: 0, width: DZMBatterySize.width, height: DZMBatterySize.height)) } override init(frame: CGRect) { super.init(frame: CGRect(x: 0, y: 0, width: DZMBatterySize.width, height: DZMBatterySize.height)) addSubviews() } func addSubviews() { batteryLevelView = UIView() batteryLevelView.layer.masksToBounds = true addSubview(batteryLevelView) image = UIImage(named: "battery_black")?.withRenderingMode(.alwaysTemplate) tintColor = UIColor.white } override func layoutSubviews() { super.layoutSubviews() let spaceW:CGFloat = 1 * (frame.width / DZMBatterySize.width) * HJBatteryLevelViewScale let spaceH:CGFloat = 1 * (frame.height / DZMBatterySize.height) * HJBatteryLevelViewScale let batteryLevelViewY:CGFloat = 2.1*spaceH let batteryLevelViewX:CGFloat = 1.4*spaceW let batteryLevelViewH:CGFloat = frame.height - 3.4*spaceH let batteryLevelViewW:CGFloat = frame.width * HJBatteryLevelViewScale let batteryLevelViewWScale:CGFloat = batteryLevelViewW / 100 var tempBatteryLevel = batteryLevel if batteryLevel < 0 { tempBatteryLevel = 0 }else if batteryLevel > 1 { tempBatteryLevel = 1 } batteryLevelView.frame = CGRect(x: batteryLevelViewX , y: batteryLevelViewY, width: CGFloat(tempBatteryLevel * 100) * batteryLevelViewWScale, height: batteryLevelViewH) batteryLevelView.layer.cornerRadius = batteryLevelViewH * 0.125 } }
quelle