Як змінити колір тла рядка стану та колір тексту на 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;
    }
}

Стрімкий

func setStatusBarBackgroundColor(color: UIColor) {

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

    statusBar.backgroundColor = color
}

Стрімкий 3

func setStatusBarBackgroundColor(color: UIColor) {

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

    statusBar.backgroundColor = color
}

Виклик цієї форми application:didFinishLaunchingWithOptionsмені спрацював.

Примітка. У нас є програма в магазині додатків з такою логікою. Тож, думаю, це нормально з політикою магазину додатків.


Редагувати:

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

У мене одна програма відхилила причину цього, тоді як іншу прийняли просто чудово. Вони вважають це приватним використанням API, тож під час розгляду вам пощастить :) - Sebyddd


5
На відміну від прийнятого рішення, це також працює, коли ви змінюєте орієнтацію. Дякую!
Майкл

5
Хіба це не приватне використання API?
Форігер

2
У мене одна програма відхилила причину цього, тоді як інша була прийнята просто чудово. Вони вважають це приватним використанням API, тож під час розгляду вам пощастить :)
Sebyddd 02

3
З цим рішенням виникла проблема. Якщо двічі натиснути кнопку головного, колір рядка стану стану зникне.
Timeless

3
Не працює на iOS 13. Додаток під назвою -statusBar або -statusBarWindow на UIApplication: цей код потрібно змінити, оскільки більше немає рядка стану чи вікна рядка стану. Замість цього використовуйте об’єкт statusBarManager на сцені вікна.
NSDeveloper

109

Goto додаток info.plist

1) Встановити View controller-based status bar appearanceна NO
2) Набір Status bar styleдля UIStatusBarStyleLightContent

Потім Goto делегата свого застосування і вставте наступний код , в якому ви встановили 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 docs рекомендують це, якщо замість цього: якщо (NSFoundationVersionNumber <= NSFoundationVersionNumber_iOS_6_1) {} else {} ура!
Джоел Балмер

2
@learner Перейдіть до info.plist, а потім виберіть будь-який рядок. Ви побачите знак +. Клацніть на знак Плюс і зі спадного меню ви побачите Status bar styleOption. Виберіть його. І вставте UIStatusBarStyleLightContentяк його значення.
Шахід Ікбал,

5
Це не враховує обертання
втрачений переклад

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) в viewDidLoad зробити a [self setNeedsStatusBarAppearanceUpdate];

3) додати такий спосіб:

 -(UIStatusBarStyle)preferredStatusBarStyle{ 
    return UIStatusBarStyleLightContent; 
 } 

ОНОВИТИ:
також перевірте керівництво розробників-до-ios-7-рядку стану


ви можете змінити його на чорний або білий
Muruganandham K

1
Це не впливає (ios7, симулятор). "PreferStatusBarStyle" ніколи не викликається.
Адам

1
ти використовуєш xib ?. якщо ТА, змінити значення рядка стану у властивості імітованих метрик
Muruganandham K

3
Ах, я знайшов проблему. Apple UINavigationController захоплює сповіщення - тобто ваша відповідь стосується лише того, коли контролер подання є верхнім контролером, немає контейнерів (немає панелі табуляції, немає панелі навігації тощо).
Адам

3
Особливий випадок при використанні Storyboard + NavigationController. Виконайте No1 вище. Далі створіть підклас для UINavigationController (назвіть його myNavController). У Раскадровці встановіть для класу NavigationController значення "myNavController". У myNavController.m виконайте No2 та No3 вище. Тепер метод у №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. перевизначити preferStatusBarStyle у вашому контролері перегляду.

-

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

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

Чи буде відхилено додаток, якщо ми їх використаємо? Змінювати такий колір statusBarView, як це, дозволено?
абхімуралідаран

@ abhi1992 Я не можу сказати, прийме Apple це чи ні, тому що я застосував це рішення у своєму корпоративному додатку, який не потрібно надсилати в App Store. :)
Крунал

Якщо я поміщу це в viewdidload контролера перегляду в додатку на основі вкладок, він встановлює колір для кожного viewController, не лише того, куди я вкладаю код (це нормально?)

14

У iOS 7 рядок стану не має фону, тому, якщо ви поставите за ним чорний вигляд із висотою 20 пікселів, ви досягнете того ж результату, що і iOS 6.

Також ви можете прочитати Посібник з переходу інтерфейсу користувача iOS 7 для отримання додаткової інформації з цього питання.


2
Габріеле, ти можеш надати код, як поставити 20px у висоту?
Dejell

Деджел, це на відповідь Шахіда.
Fattie

Не використовуйте просто "20"! Ви можете правильно отримати значення, див. Мою довгу відповідь нижче.
Fattie

8

Напишіть це у своєму методі ViewDidLoad:

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

Він також визначив колір рядка стану для мене та інших помилок інтерфейсу користувача.


7

Ось загальне рішення для копіювання та вставки із

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

кожного питання.

З вдячністю Варіфу Аханду Ріші !

за дивовижну знахідку щодо 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];

де "панель навігації" - панель 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 (бар)
JVS

5

Свіфт 4:

// Зміна кольору тла рядка стану

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

statusBar?.backgroundColor = UIColor.red

4

Змінити колір тла рядка стану: Швидкий:

let proxyViewForStatusBar : UIView = UIView(frame: CGRectMake(0, 0,self.view.frame.size.width, 20))    
        proxyViewForStatusBar.backgroundColor=UIColor.whiteColor()
        self.view.addSubview(proxyViewForStatusBar)

1

У випадку швидкого 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) У своєму plist мені довелося додати це:

<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

Спробуйте це. Використовуйте цей код у функції класу делегування програми 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
мова не йде про встановлення кольору тексту
Johnykutty

Додавання фонового зображення є надмірним, якщо ви просто хочете встановити однотонний колір, і неможливо, особливо якщо ви хочете мати можливість змінювати колір на льоту
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

Стрімкий 4

В Info.plistдодати це властивість

Переглянути вигляд рядка стану на основі контролера на NO

а після цього 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

Швидкий код

            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.