Я нашел четыре разных способа изменить строку состояния iOS в Xcode. Почему их так много и в чем разница?

Я пытался изменить цвет строки состояния в моем приложении Swift, и я определил четыре способа сделать это в XCode. Тем не менее, я только смог успешно использовать метод 3:

1. Смоделированные метрики (только для раскадровки)

2. Изменить в общем - >информация о развертывании - >стиль строки состояния

убедитесь, что следующая информация.для параметра списка задано значение "NO":

View controller-based status bar appearance : NO

выберите "Light" или "Default" в раскрывающемся списке здесь:

General->Deployment Info->Status Bar Style

3. Установите его вручную

убедитесь, что следующая информация.параметр plist имеет значение "NO":

View controller-based status bar appearance : NO

вставьте следующий код (обычно в didFinishLaunchingWithOptions):

UIApplication.sharedApplication().statusBarStyle = .LightContent

4. Переопределить "preferredStatusBarStyle()"

убедитесь, что следующая информация.свойство plist существует и имеет значение "YES":

View controller-based status bar appearance : YES

затем добавьте следующий код для UIViewController (или производного класса), который установлен для вашего ViewController в раскадровке:

override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return UIStatusBarStyle.LightContent
}

мое текущее понимание

смоделированные метрики предназначены только для отображения и не обеспечивают фактических изменений во время выполнения. Я считаю, что настройка вручную и изменение настроек на вкладке "Общие", вероятно, делают то же самое под капотом, но я не уверен. Я предполагаю, что есть также способ установить это свойство непосредственно для отдельных контроллеров представления.

вопрос

по какой-то причине единственным методом, который действительно работал для меня, является метод 3, устанавливающий вручную. Ни один из других методов не предусматривает никаких изменений. Лично я предпочел бы переопределить в производном классе, чтобы у меня было центральное место для моих общих стилей UIViewController.

1 ответов


1

это ничего не делает, потому что это просто смоделированная метрика. Вы можете установить его в interface builder, но смоделированные метрики просто имитация и не применяется во время выполнения.

2

эта опция запрещает отдельным контроллерам вида устанавливать внешний вид строки состояния (из-за информации.plist), и он полагается на набор цветов по умолчанию в настройках развертывания, но это значение может быть изменено во время выполнения (см. параметр 3).

3

как и опция 2, эта опция запрещает отдельным контроллерам просмотра устанавливать внешний вид строки состояния (из-за информации.plist setting), но в отличие от опции 2, мы динамически устанавливаем цвет во время выполнения. Мы можем сделать это только в делегате приложения при запуске... или мы можем изменить его в другое время. Может быть, у нас есть ночной режим, как приложение Google Maps, или, может быть, мы позволяем пользователю настроить свои собственные цвета темы где-то.

4

если вы внедряете в UINavigationController, то вам нужно будет подкласс UINavigationController и переопределить "preferredStatusBarStyle ()" здесь.

вы можете пропустить шаг,описанные здесь. В viewDidLoad, попробуйте указать, что вы хотите возможность установить статус-баре.

override func viewDidLoad() {
    super.viewDidLoad()

    setNeedsStatusBarAppearanceUpdate()
}

что касается того, почему существуют разные подходы к, казалось бы, одной и той же вещи, мы должны сначала понять что это не одно и то же.

еще раз, давайте разберем его.

  • Вариант 1 не является изменением времени выполнения, поэтому нам это действительно не интересно.
  • Вариант 2 & 3 почти то же самое.
  • Вариант 4 отличается от варианта 2 & 3.

Почему у нас есть ваш вариант 2/3 и ваш вариант 4?

потому что в некоторых приложениях может потребоваться один и тот же цвет строки состояния для каждого контроллера вида в вашем приложении, но этот цвет строки состояния может отличаться в зависимости от некоторых настроек.

рассмотрим, например, приложение Google Maps. Ночью приложение становится черным, а строка состояния должна отображаться белым, но днем приложение белое, а строка состояния должна быть черной. Это то же самое для каждого контроллера вида, поэтому код для установки цвета должен быть реализован только в одном месте (не требуя каждый view control наследуется от того же базового родителя). Для этого мы вероятно, хотите, чтобы ваш вариант 2/3.

но рассмотрим приложение, которое имеет различные цветные контроллеры вида, где некоторые из них выглядят лучше с белой строке состояния, а другие выглядят лучше с черным. Для этого подхода нам нужен ваш вариант 4 и пусть каждый контроллер вида индивидуально определяет, каким цветом должна быть строка состояния.

короче говоря, ваш вариант 2/3-это глобальная настройка строки состояния, которая применяется независимо от того, где вы находитесь в приложении, в то время как вариант 4 является локальным, за-VC установочный.