Как изменить цвет фона строки состояния и цвет текста на iOS 7?

88

Мое текущее приложение работает на iOS 5 и 6.

Панель навигации имеет оранжевый цвет, а строка состояния имеет черный цвет фона с белым цветом текста. Однако, когда я запускаю то же приложение на iOS 7, я вижу, что строка состояния выглядит прозрачной с тем же оранжевым цветом фона, что и панель навигации, а цвет текста строки состояния черный.

Из-за этого я не могу различить строку состояния и панель навигации.

Как сделать так, чтобы строка состояния выглядела так же, как в iOS 5 и 6, то есть с черным цветом фона и белым цветом текста? Как я могу сделать это программно?

Реджиш Раджан
источник

Ответы:

174

Предупреждение: он больше не работает с iOS 13 и Xcode 11.

================================================== ======================

Пришлось искать другие пути. Что не связано addSubviewс окном. Потому что я двигаюсь вверх по окну, когда отображается клавиатура.

Цель-C

- (void)setStatusBarBackgroundColor:(UIColor *)color {

    UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];

    if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
        statusBar.backgroundColor = color;
    }
}

Swift

func setStatusBarBackgroundColor(color: UIColor) {

    guard  let statusBar = UIApplication.sharedApplication().valueForKey("statusBarWindow")?.valueForKey("statusBar") as? UIView else {
        return
    }

    statusBar.backgroundColor = color
}

Swift 3

func setStatusBarBackgroundColor(color: UIColor) {

    guard let statusBar = UIApplication.shared.value(forKeyPath: "statusBarWindow.statusBar") as? UIView else { return }

    statusBar.backgroundColor = color
}

Вызов этой формы application:didFinishLaunchingWithOptionsу меня сработал.

NB. У нас есть приложение в магазине приложений с такой логикой. Так что я думаю, что с политикой магазина приложений все в порядке.


Редактировать:

Используйте на свой риск. Сформируйте комментатора @Sebyddd

Одно приложение было отклонено из-за этого, а другое было принято нормально. Они действительно считают это частным использованием API, так что вам может повезти в процессе проверки :) - Sebyddd

Вариф Аханд Риши
источник
5
В отличие от принятого решения, это также работает при изменении ориентации. Благодарность!
Майкл
5
Разве это не частное использование API?
Foriger
2
Одно приложение было отклонено из-за этого, а другое было принято нормально. Они считают это частным использованием API, так что вам может
повезти в
3
В этом решении есть проблема: когда вы дважды нажимаете кнопку «Домой», этот цвет строки состояния исчезает.
Timeless
3
Не работает на iOS 13. Приложение называется -statusBar или -statusBarWindow в UIApplication: этот код необходимо изменить, поскольку больше нет строки состояния или окна строки состояния. Вместо этого используйте объект statusBarManager в сцене окна.
NSDeveloper
109

Перейдите к своему приложению info.plist

1) Установите View controller-based status bar appearanceзначение NO
2) Установите Status bar styleзначение UIStatusBarStyleLightContent

Затем. Перейдите к делегату приложения и вставьте следующий код, в котором вы устанавливаете свой Windows RootViewController.

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
{
    UIView *view=[[UIView alloc] initWithFrame:CGRectMake(0, 0,[UIScreen mainScreen].bounds.size.width, 20)];
    view.backgroundColor=[UIColor blackColor];
    [self.window.rootViewController.view addSubview:view];
}

Надеюсь, это поможет.

Шахид Икбал
источник
Просто упомяну, что документация Apple рекомендует это, если вместо этого проверьте: if (NSFoundationVersionNumber <= NSFoundationVersionNumber_iOS_6_1) {} else {} ура!
Джоэл Балмер
2
@learner Перейти к info.plist и затем выбрать любую строку. Вы увидите знак +. Нажмите на знак плюса, и в раскрывающемся списке вы должны увидеть Status bar styleвариант. Выберите это. И вставьте UIStatusBarStyleLightContentкак его значение.
Шахид Икбал,
5
Это не учитывает ротацию
lostintranslation
4
Лучше использовать ширину экрана UIS:UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 20)];
KlimczakM
2
Более лаконичный способ установки рамки - использованиеUIApplication.sharedApplication().statusBarFrame
Дуг
28

При обработке цвета фона строки состояния в iOS 7 есть 2 случая

Случай 1. Просмотр с помощью панели навигации

В этом случае используйте следующий код в своем методе viewDidLoad

 UIApplication *app = [UIApplication sharedApplication];
 CGFloat statusBarHeight = app.statusBarFrame.size.height;

 UIView *statusBarView = [[UIView alloc] initWithFrame:CGRectMake(0, -statusBarHeight, [UIScreen mainScreen].bounds.size.width, statusBarHeight)];
 statusBarView.backgroundColor = [UIColor yellowColor];
 [self.navigationController.navigationBar addSubview:statusBarView];

Случай 2: просмотр без панели навигации

В этом случае используйте следующий код в своем методе viewDidLoad

 UIApplication *app = [UIApplication sharedApplication];
 CGFloat statusBarHeight = app.statusBarFrame.size.height;

 UIView *statusBarView =  [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, statusBarHeight)];
 statusBarView.backgroundColor  =  [UIColor yellowColor];
 [self.view addSubview:statusBarView];

Ссылка на источник http://code-ios.blogspot.in/2014/08/how-to-change-background-color-of.html

Теджа Кумар Бетина
источник
У меня это сработало, но строка состояния должна быть высотой 20 пунктов: [[UIView alloc] initWithFrame: CGRectMake (0, -20, 320, 20)];
LordParsley
27

1) установите UIViewControllerBasedStatusBarAppearance в YES в списке

2) in viewDidLoad сделать [self setNeedsStatusBarAppearanceUpdate];

3) добавьте следующий метод:

 -(UIStatusBarStyle)preferredStatusBarStyle{ 
    return UIStatusBarStyleLightContent; 
 } 

ОБНОВЛЕНИЕ:
также проверьте developers-guide-to-the-ios-7-status-bar

Муруганандхам К.
источник
вы можете изменить его на черный или белый
Муруганандхам К.
1
На это нет никакого эффекта (ios7, симулятор). Prev NextStatusBarStyle никогда не вызывается.
Adam
1
вы используете xib ?. если ДА, измените значение строки состояния в свойстве смоделированных показателей
Муруганандхам К.
3
Ах, я нашел проблему. UINavigationController от Apple захватывает уведомление - т.е. ваш ответ предназначен только для тех случаев, когда контроллер представления является верхним контроллером, нет контейнеров (нет панели вкладок, панели навигации и т. Д.).
Адам
3
Особый случай при использовании Storyboard + NavigationController. Сделайте №1 выше. Затем создайте подкласс для UINavigationController (назовите его myNavController). В раскадровке установите для класса NavigationController значение «myNavController». В myNavController.m выполните пункты 2 и 3 выше. Теперь метод из №3 будет вызываться в вашем подклассе (установите журнал или точку останова для наблюдения).
ObjectiveTC
16

Вы можете установить цвет фона для строки состояния во время запуска приложения или во время 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 / инструкция по изменению строки состояния. В строке состояния разрешены только темный и светлый (пока и черный).

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

Если вы хотите , чтобы стиль набора статуса бара, уровень приложений , а затем установить UIViewControllerBasedStatusBarAppearanceв NOвашей .plist»файла`.

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

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

  3. переопределить предпочтительныйStatusBarStyle в вашем контроллере представления.

-

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

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}
Крунал
источник
Будет ли приложение отклонено, если мы воспользуемся ими? Можно ли изменить цвет statusBarView таким образом?
abhimuralidharan
@ abhi1992 Я не могу сказать, примет ли Apple это решение или нет, потому что я реализовал это решение в своем корпоративном приложении, которое не нужно отправлять в магазин приложений. :)
Krunal 05
Если я помещаю это в viewdidload контроллера просмотра в приложении на основе вкладок, он устанавливает цвет для каждого viewController, а не только для того, где я поместил код (это нормально?)
14

В iOS 7 строка состояния не имеет фона, поэтому, если вы поместите за ней черный вид высотой 20 пикселей, вы получите тот же результат, что и iOS 6.

Также вы можете прочитать Руководство по переходу на iOS 7 UI для получения дополнительной информации по этому вопросу.

Габриэле Петронелла
источник
2
Габриэле, не могли бы вы предоставить код, как поставить за ним высоту 20 пикселей?
Dejell 06
Дежел, это ответ Шахида.
Fattie 01
Не используйте просто «20»! Вы можете получить значение правильно, см. Мой длинный ответ ниже.
Fattie
8

Напишите это в своем методе ViewDidLoad:

if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)]) {
    self.edgesForExtendedLayout=UIRectEdgeNone;
    self.extendedLayoutIncludesOpaqueBars=NO;
    self.automaticallyAdjustsScrollViewInsets=NO;
}

Он исправил цвет строки состояния для меня и другие смещения пользовательского интерфейса в некоторой степени.

санджана
источник
7

Вот общее решение для копирования и вставки с

абсолютно правильное объяснение

по каждой проблеме.

С благодарностью Warif Akhand Rishi !

за удивительную находку, касающуюся keyPath statusBarWindow.statusBar. Хороший.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    
    // handle the iOS bar!
    
    // >>>>>NOTE<<<<<
    // >>>>>NOTE<<<<<
    // >>>>>NOTE<<<<<
    // "Status Bar Style" refers to the >>>>>color of the TEXT<<<<<< of the Apple status bar,
    // it does NOT refer to the background color of the bar. This causes a lot of confusion.
    // >>>>>NOTE<<<<<
    // >>>>>NOTE<<<<<
    // >>>>>NOTE<<<<<
    
    // our app is white, so we want the Apple bar to be white (with, obviously, black writing)
    
    // make the ultimate window of OUR app actually start only BELOW Apple's bar....
    // so, in storyboard, never think about the issue. design to the full height in storyboard.
    let h = UIApplication.shared.statusBarFrame.size.height
    let f = self.window?.frame
    self.window?.frame = CGRect(x: 0, y: h, width: f!.size.width, height: f!.size.height - h)
    
    // next, in your plist be sure to have this: you almost always want this anyway:
    // <key>UIViewControllerBasedStatusBarAppearance</key>
    // <false/>
    
    // next - very simply in the app Target, select "Status Bar Style" to Default.
    // Do nothing in the plist regarding "Status Bar Style" - in modern Xcode, setting
    // the "Status Bar Style" toggle simply sets the plist for you.
    
    // finally, method A:
    // set the bg of the Apple bar to white.  Technique courtesy Warif Akhand Rishi.
    // note: self.window?.clipsToBounds = true-or-false, makes no difference in method A.
    if let sb = UIApplication.shared.value(forKeyPath: "statusBarWindow.statusBar") as? UIView {
        sb.backgroundColor = UIColor.white
        // if you prefer a light gray under there...
        //sb.backgroundColor = UIColor(hue: 0, saturation: 0, brightness: 0.9, alpha: 1)
    }
    
    /*
    // if you prefer or if necessary, method B:
    // explicitly actually add a background, in our app, to sit behind the apple bar....
    self.window?.clipsToBounds = false // MUST be false if you use this approach
    let whiteness = UIView()
    whiteness.frame = CGRect(x: 0, y: -h, width: f!.size.width, height: h)
    whiteness.backgroundColor = UIColor.green
    self.window!.addSubview(whiteness)
    */
    
    return true
}
Толстяк
источник
6

Просто чтобы добавить к ответу Шахида - вы можете учитывать изменения ориентации или разные устройства, используя это (iOS7 +):

- (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  ...

  //Create the background
  UIView* statusBg = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.window.frame.size.width, 20)];
  statusBg.backgroundColor = [UIColor colorWithWhite:1 alpha:.7];

  //Add the view behind the status bar
  [self.window.rootViewController.view addSubview:statusBg];

  //set the constraints to auto-resize
  statusBg.translatesAutoresizingMaskIntoConstraints = NO;
  [statusBg.superview addConstraint:[NSLayoutConstraint constraintWithItem:statusBg attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:statusBg.superview attribute:NSLayoutAttributeTop multiplier:1.0 constant:0.0]];
  [statusBg.superview addConstraint:[NSLayoutConstraint constraintWithItem:statusBg attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:statusBg.superview attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0.0]];
  [statusBg.superview addConstraint:[NSLayoutConstraint constraintWithItem:statusBg attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:statusBg.superview attribute:NSLayoutAttributeRight multiplier:1.0 constant:0.0]];
  [statusBg.superview addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[statusBg(==20)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(statusBg)]];
  [statusBg.superview setNeedsUpdateConstraints];
  ...
}
Bendytree
источник
Да, это даже лучше для обработки размеров и ориентации экрана. Также добавьте что-то вроде этого вокруг этого кода: if (NSFoundationVersionNumber> NSFoundationVersionNumber_iOS_6_1)
Benjamin Piette
6

для фона вы можете легко добавить вид, как в примере:

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0,320, 20)];
view.backgroundColor = [UIColor colorWithRed:0/255.0 green:0/255.0 blue:0/255.0 alpha:0.1];
[navbar addSubview:view];

где «navbar» - это UINavigationBar.

user3107409
источник
4
Ваши первые две строки верны .. Но последняя строка должна быть [navigationController.view addSubview: view]; Он должен быть добавлен внутри представления UINavigationController, а не представления UINavigationBar, поскольку он добавит представление после 20 пикселей строки состояния, не перекрывая строку состояния.
Шахид Икбал
В Swift используйте это: let rect = CGRect (x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIApplication.shared.statusBarFrame.height) let bar = UIView (frame: rect) bar.backgroundColor = UIColor.white navigationController? .View.addSubview (bar)
JVS
5

Swift 4:

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

let statusBar = UIApplication.shared.value(forKeyPath: "statusBarWindow.statusBar") as? UIView

statusBar?.backgroundColor = UIColor.red
В.Кумар
источник
4

Изменить цвет фона строки состояния: Swift:

let proxyViewForStatusBar : UIView = UIView(frame: CGRectMake(0, 0,self.view.frame.size.width, 20))    
        proxyViewForStatusBar.backgroundColor=UIColor.whiteColor()
        self.view.addSubview(proxyViewForStatusBar)
Йогеш Лолусаре
источник
1

В случае с Swift 2.0 на iOS 9

Поместите следующее в делегат приложения в didFinishLaunchingWithOptions:

    let view: UIView = UIView.init(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.size.width, 20))

    view.backgroundColor = UIColor.blackColor()  //The colour you want to set

    view.alpha = 0.1   //This and the line above is set like this just if you want 
                          the status bar a darker shade of 
                          the colour you already have behind it.

    self.window!.rootViewController!.view.addSubview(view)
Киган Круикшанк
источник
Это работает, но я не думаю, что это лучший способ справиться с этим стилем
Майкл
1

Решение iTroid23 сработало для меня. Я пропустил решение Swift. Возможно, это будет полезно:

1) В моем листе мне пришлось добавить это:

<key>UIViewControllerBasedStatusBarAppearance</key>
<true/>

2) Мне не нужно было вызывать setNeedsStatusBarAppearanceUpdate.

3) Мне пришлось быстро добавить это в свой UIViewController:

override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return UIStatusBarStyle.LightContent
}
Дирк
источник
Спасибо за ключ «UIViewControllerBasedStatusBarAppearance», мне помогли :)
LightNight
1

Если вы используете a UINavigationController, вы можете использовать такое расширение:

extension UINavigationController {
    private struct AssociatedKeys {
        static var navigationBarBackgroundViewName = "NavigationBarBackground"
    }

    var navigationBarBackgroundView: UIView? {
        get {
            return objc_getAssociatedObject(self,
                                        &AssociatedKeys.navigationBarBackgroundViewName) as? UIView
        }
        set(newValue) {
             objc_setAssociatedObject(self,
                                 &AssociatedKeys.navigationBarBackgroundViewName,
                                 newValue,
                                 .OBJC_ASSOCIATION_RETAIN)
        }
    }

    func setNavigationBar(hidden isHidden: Bool, animated: Bool = false) {
       if animated {
           UIView.animate(withDuration: 0.3) {
               self.navigationBarBackgroundView?.isHidden = isHidden
           }
       } else {
           navigationBarBackgroundView?.isHidden = isHidden
       }
    }

    func setNavigationBarBackground(color: UIColor, includingStatusBar: Bool = true, animated: Bool = false) {
        navigationBarBackgroundView?.backgroundColor = UIColor.clear
        navigationBar.backgroundColor = UIColor.clear
        navigationBar.barTintColor = UIColor.clear

        let setupOperation = {
            if includingStatusBar {
                self.navigationBarBackgroundView?.isHidden = false
                if self.navigationBarBackgroundView == nil {
                    self.setupBackgroundView()
                }
                self.navigationBarBackgroundView?.backgroundColor = color
            } else {
                self.navigationBarBackgroundView?.isHidden = true
                self.navigationBar.backgroundColor = color
            }
        }

        if animated {
            UIView.animate(withDuration: 0.3) {
                setupOperation()
            }
        } else {
            setupOperation()
        }
    }

    private func setupBackgroundView() {
        var frame = navigationBar.frame
        frame.origin.y = 0
        frame.size.height = 64

        navigationBarBackgroundView = UIView(frame: frame)
        navigationBarBackgroundView?.translatesAutoresizingMaskIntoConstraints = true
        navigationBarBackgroundView?.autoresizingMask = [.flexibleWidth, .flexibleBottomMargin]

        navigationBarBackgroundView?.isUserInteractionEnabled = false

        view.insertSubview(navigationBarBackgroundView!, aboveSubview: navigationBar)
    }
}

Это в основном делает фон панели навигации прозрачным и использует другой UIView в качестве фона. Вы можете вызвать setNavigationBarBackgroundметод своего контроллера навигации, чтобы установить цвет фона панели навигации вместе со строкой состояния.

Имейте в виду, что затем вам нужно использовать setNavigationBar(hidden: Bool, animated: Bool)метод в расширении, если вы хотите скрыть панель навигации, иначе представление, которое использовалось в качестве фона, все равно будет отображаться.

halil_g
источник
Для меня это был лучший ответ, поскольку он смягчал множество других проблем с ответами. Обратной стороной является неправильный фиксированный размер frame.size.height = 64. Еще один способ получения высоты -> .view.window? .WindowScene? .StatusBarManager? .StatusBarFrame.height ?? 0.
Гонсало Гаспар
1

Попробуй это. Используйте этот код в своей функции класса appdelegate didFinishLaunchingWithOptions:

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
[application setStatusBarHidden:NO];
UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
    statusBar.backgroundColor = [UIColor blackColor];
}
Картиккк
источник
1

Приведенный ниже фрагмент кода должен работать с Objective C.

   if (@available(iOS 13.0, *)) {
      UIView *statusBar = [[UIView alloc]initWithFrame:[UIApplication sharedApplication].keyWindow.windowScene.statusBarManager.statusBarFrame] ;
      statusBar.backgroundColor = [UIColor whiteColor];
      [[UIApplication sharedApplication].keyWindow addSubview:statusBar];
  } else {
      // Fallback on earlier versions

       UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
          if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
              statusBar.backgroundColor = [UIColor whiteColor];//set whatever color you like
      }
  }
Говинд
источник
Вы получите двойную строку состояния на iOS 13.
kelin
0

Для цвета полосы: вы предоставляете настраиваемое фоновое изображение для полосы.

Для цвета текста: используйте информацию в разделе Об обработке текста в iOS.

Крис Алан
источник
1
Речь
Добавление фонового изображения - излишество, если вы просто хотите установить сплошной цвет, и недопустимо, особенно если вы хотите иметь возможность изменять цвет на лету
halil_g
0

Мне удалось настроить цвет StatusBar довольно просто, добавив AppDelegate.csфайл в метод:

public override bool FinishedLaunching(UIApplication app, NSDictionary options)

следующий код:

UIView statusBar = UIApplication.SharedApplication.ValueForKey(new NSString("statusBar")) as UIView;

if (statusBar!=null && statusBar.RespondsToSelector(new Selector("setBackgroundColor:")))
{
   statusBar.BackgroundColor = Color.FromHex(RedColorHex).ToUIColor();
}

Получается что-то вроде этого:

введите описание изображения здесь

Ссылка: https://jorgearamirez.wordpress.com/2016/07/18/lesson-x-effects-for-the-status-bar/

Дэн
источник
Что это за язык?
Ахмадреза,
1
@Alfi Xamarin формирует и в фоновом режиме его C #
Дэн
0

Swift 4

В Info.plistдополнение к этому свойству

Просмотр отображения строки состояния на основе контроллера на НЕТ

и после этого AppDelegateвнутри didFinishLaunchingWithOptionsдобавьте эти строки кода

UIApplication.shared.isStatusBarHidden = false
UIApplication.shared.statusBarStyle = .lightContent
Smg baquer
источник
0

В Swift 5 и Xcode 10.2

DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + Double(Int64(0.1 * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC), execute: {

//Set status bar background colour
let statusBar = UIApplication.shared.value(forKeyPath: "statusBarWindow.statusBar") as? UIView
statusBar?.backgroundColor = UIColor.red
//Set navigation bar subView background colour
   for view in controller.navigationController?.navigationBar.subviews ?? [] {
      view.tintColor = UIColor.white
      view.backgroundColor = UIColor.red
   }
})

Здесь я исправил цвет фона строки состояния и цвет фона панели навигации. Если вы не хотите, чтобы цвет панели навигации закомментировал его.

iOS
источник
0

Код Swift

            let statusBarView = UIView(frame: CGRect(x: 0, y: 0, width: view.width, height: 20.0))
            statusBarView.backgroundColor = UIColor.red
            self.navigationController?.view.addSubview(statusBarView)
Самкит Джайн
источник
0

Вы можете использовать, как показано ниже, для iOS 13 * и Swift 4.

1 -> Установите для отображения строки состояния на основе контроллера значение НЕТ

extension UIApplication {
var statusBarView: UIView? {
    if #available(iOS 13.0, *) {
       let statusBar =  UIView()

        statusBar.frame = UIApplication.shared.statusBarFrame

        UIApplication.shared.keyWindow?.addSubview(statusBar)
      
        return statusBar
    } else {
        let statusBar = UIApplication.shared.value(forKeyPath: "statusBarWindow.statusBar") as? UIView
        return statusBar
    }
}

использовать в didFinishLaunchingWithOptions

UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
Локеш
источник