Я нашел четыре разных способа изменить строку состояния 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 установочный.