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


88

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

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

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

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


вы можете получить помощь по этой ссылке: stackoverflow.com/questions/18901753/…
— Utkarsh Goel

Ответы:


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];
  ...
}

Да, это даже лучше для обработки размеров и ориентации экрана. Также добавьте что-то вроде этого вокруг этого кода: 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.


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)метод в расширении, если вы хотите скрыть панель навигации, иначе представление, которое использовалось в качестве фона, все равно будет отображаться.


Для меня это был лучший ответ, поскольку он смягчал множество других проблем с ответами. Обратной стороной является неправильный фиксированный размер 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.



Добавление фонового изображения - излишество, если вы просто хотите установить сплошной цвет, и недопустимо, особенно если вы хотите иметь возможность изменять цвет на лету
— 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

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

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


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.