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

Как расширение Bleiers DictionaryBindingList, я сделал небольшое изменение, чтобы позволить добавлять значения для перезаписывания существующих значений. Я использую этот метод с веб-узлом WAMP, поэтому он позволит мне обновлять значения, просто обновляя коллекцию, а затем мне нужно связать события со значениями.

    public void Add(TKey key, TValue value)
    {
        if (Dictionary.ContainsKey(key))
        {
            int position = IndexOf(key);
            Dictionary.Remove(key);
            Remove(key);
            InsertItem(position, new KeyValuePair<TKey, TValue>(key, value));
            return;
        }
        base.Add(new KeyValuePair<TKey, TValue>(key, value));
    }
960
задан Krunal 24 July 2018 в 13:23
поделиться

10 ответов

Вы можете сделать это из info.plist:

1) «Просмотр внешнего вида строки состояния на основе контроллера» установлен на «НЕТ»

2) «Стиль строки состояния» установлен на «НЕТ» UIStatusBarStyleLightContent "

сделано

4
ответ дан Dima Deplov 24 July 2018 в 13:23
поделиться

Я делаю это в iOS 9 и Swift 2.0, если я использую UINavigationController

self.navigationController?.navigationBar.barStyle = UIBarStyle.Black

И я делаю это, если я использую модальный переход

override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return .LightContent
}
3
ответ дан Alexander Khitev 24 July 2018 в 13:23
поделиться

Это похоже на проблему с текущей сборкой Xcode и iOS 7.

Некоторый связанный контент на форумах разработчиков Apple находится в поиске UIStatusBarStyleLightContent в «iOS 7 Beta Livability» на форумах разработчиков Apple * (в настоящее время 32 сообщения).

Я наткнулся на это, пытаясь установить его на облегченную версию.

(Это просто продолжение ответа Аарона.)

2
ответ дан Peter Mortensen 24 July 2018 в 13:23
поделиться

В качестве альтернативы, вы можете отказаться от появления строки состояния на основе контроллера вида:

  1. Установите View controller-based status bar appearance в NO в вашем Info.plist.
  2. Звоните [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

Примечание. Этот метод устарел в iOS9. Вместо этого используйте preferredStatusBarStyle в UIViewController. (см. Библиотека разработчиков Apple )

843
ответ дан squarefrog 24 July 2018 в 13:23
поделиться

Ничего из этого не помогло мне, так что вот рабочее решение ...

В Info.plist добавьте строку:

UIViewControllerBasedStatusBarAppearance и установите значение NO.

Затем в AppDelegate в didFinishLaunchingWithOptions добавьте эти строки:

[application setStatusBarHidden:NO];
[application setStatusBarStyle:UIStatusBarStyleLightContent];
96
ответ дан Peter Mortensen 24 July 2018 в 13:23
поделиться

Вот Руководство / Инструкция Apple об изменении строки состояния. Only Dark & ​​amp; свет (в то время как & черный) разрешены в строке состояния.

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

Если вы хотите установить стиль строки состояния, уровень приложения затем установите 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
}

Установите значение .plist в соответствии с уровнем настройки стиля строки состояния. enter image description here


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

}



Вот результат:

enter image description here

8
ответ дан Krunal 24 July 2018 в 13:23
поделиться

Я использую Xcode 6 beta 5 в проекте Swift для приложения iOS 7.

Вот что я сделал, и это работает:

info.plist:

Enter image description here

27
ответ дан Peter Mortensen 24 July 2018 в 13:23
поделиться

Ответ обновлен для для Xcode GM Seed:

  1. В Info.plist положить View controller-based status bar appearance как NO

  2. В проекте , установите:

    Enter image description here

  3. В ViewDidLoad:

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

12
ответ дан Peter Mortensen 24 July 2018 в 13:23
поделиться

Если вы хотите получить тот же результат в Swift, вы можете использовать этот код в файле AppDelegate.swift:

UINavigationBar.appearance().barStyle = .BlackTranslucent

И текст вашей строки состояния будет белым :-)!

8
ответ дан fraxool 24 July 2018 в 13:23
поделиться

решением (решениями)

UINavigationController iOS 13 является подкласс UIViewController (кто знал рџ™ѓ)!

Поэтому при представлении контроллеров представления встроил в контроллеры навигации, Вы действительно не представляете встроенные контроллеры представления; Вы представляете контроллеры навигации! UINavigationController, как подкласс UIViewController, наследовался preferredStatusBarStyle и childForStatusBarStyle, который можно установить, как желаемый.

Любой из следующих методов должен работать:

  1. Выбирает из Темного Режима полностью
    • В Вашем info.plist, добавляет следующее свойство:
        <литий> Ключ - UIUserInterfaceStyle (иначе. "Стиль Пользовательского интерфейса") <литий> Значение - Свет
  2. Переопределение preferredStatusBarStyle в [1 113]

    • preferredStatusBarStyle ( документ ) - предпочтительный стиль строки состояния для контроллера представления
    • Подкласс или расширяется UINavigationController

      class MyNavigationController: UINavigationController {
          override var preferredStatusBarStyle: UIStatusBarStyle {
              .lightContent
          }
      }
      

      ИЛИ

      extension UINavigationController {
          open override var preferredStatusBarStyle: UIStatusBarStyle {
              .lightContent
          }
      }
      
  3. Переопределение childForStatusBarStyle в [1 117]

    • childForStatusBarStyle ( документ ) - Названный, когда системе нужен контроллер представления для использования для определения стиля строки состояния
    • Согласно документации Apple,

      , "Если контейнерный контроллер представления получает свой стиль строки состояния из одного из его дочерних контроллеров представления, [переопределяют это свойство] и возврат тот дочерний контроллер представления. Если Вы возвращаете ноль или не переопределяете этот метод, стиль строки состояния для сам используется. Если возвращаемое значение из этого метода изменения, назовите setNeedsStatusBarAppearanceUpdate () методом".

    • , Другими словами, если Вы не реализуете решение 3 здесь, система отступит к решению 2 выше.
    • Подкласс или расширяется UINavigationController

      class MyNavigationController: UINavigationController {
          override var childForStatusBarStyle: UIViewController? {
              topViewController
          }
      }
      

      , ИЛИ

      extension UINavigationController {    
          open override var childForStatusBarStyle: UIViewController? {
              topViewController
          }
      }
      
    • можно возвратить любой контроллер представления, который Вы хотели бы выше. Я рекомендую одно из следующего:

        <литий> topViewController ([1 121]) ( документ ) - контроллер представления наверху стопки навигации <литий> visibleViewController ([1 123]) ( документ ) - контроллер представления, связанный с в настоящее время видимым представлением в интерфейсе навигации (подсказка: это может включать "контроллер представления, который был представлен модально сверху самого контроллера навигации")

Примечание: Если Вы решаете разделить на подклассы UINavigationController, не забудьте применять тот класс к своим военно-морским контроллерам через инспектора идентификационных данных в IB.

P.S. Это работает над iOS 13 😎

1
ответ дан 19 December 2019 в 20:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: