Я пытаюсь изменить цвет строки состояния как синий или какой-либо другой цвет.
Возможно ли это, или Apple не позволяет?
Я пытаюсь изменить цвет строки состояния как синий или какой-либо другой цвет.
Возможно ли это, или Apple не позволяет?
ПРИМЕЧАНИЕ. Это решение не работает в iOS 13 и более поздних версиях.
Сначала в Plist установите View controller-based status bar appearance
в NO
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
if statusBar.responds(to:#selector(setter: UIView.backgroundColor)) {
statusBar.backgroundColor = UIColor.blue
}
UIApplication.shared.statusBarStyle = .lightContent
return true
}
Снимок экрана ниже
Нет, это невозможно с готовыми общедоступными API.
Но с выпуском iOS 7
вы можете изменить внешний вид строки состояния. Поэтому я публикую свое решение.
От отдельного контроллера представления, переопределяя preferredStatusBarStyle
:
-(UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
Кроме того, вы можете установить стиль строки состояния, используя метод UIApplication statusBarStyle
. Для этого вставьте новый ключ с именем "Просмотр внешнего вида строки состояния на основе контроллера" и установите значение "NO".
Отключив "Вид строки состояния на основе контроллера", вы можете установить стиль строки состояния, используя следующий код.
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
В конце измените цвет оттенка свойства UINavigationBar
, как показано ниже
[[UINavigationBar appearance] setBarTintColor:[UIColor blueColor]];
Вы можете установить цвет фона для строки состояния во время запуска приложения или во время 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 Guidelines/Instruction об изменении строки состояния. Only Dark & свет (в то время как & черный) разрешены в строке состояния.
Вот как изменить стиль строки состояния:
Если вы хотите установить стиль строки состояния, уровень приложения, то установите UIViewControllerBasedStatusBarAppearance
на NO
в вашем файле .plist.
если вы хотите установить стиль строки состояния, на уровне контроллера представления выполните следующие действия:
UIViewControllerBasedStatusBarAppearance
на YES
в файле .plist
, если вам нужно установить стиль строки состояния только на уровне UIViewController.В viewDidLoad добавить функцию - setNeedsStatusBarAppearanceUpdate
переопределите предпочитаемый элемент StatusBarStyle в вашем контроллере представления.
-
override func viewDidLoad() {
super.viewDidLoad()
self.setNeedsStatusBarAppearanceUpdate()
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
Установите значение .plist в соответствии с уровнем настройки стиля строки состояния.
Вот мое обходное решение: создать UIView
, добавить его в корневой вид контроллера просмотра в качестве фона искусственного фона
1.Создайте UIView
// status bar height is 20.0pt
CGRect frame = CGRectMake(0.0, 0.0, [UIScreen mainScreen].bounds.size.width, 20.0);
UIView *fakeStatusBarBG = [[UIView alloc] initWithFrame:frame];
fakeStatusBarBG.backgroundColor = [UIColor yourColor];
2. Добавьте его в корневой режим контроллера просмотра
// self is your view controller, make sure fakeStatusBarBG is the top subview in your view hierarchy
[self.view insertSubview:fakeStatusBarBG aboveSubview:yourTopSubview];
Там ваш ход.
3. (Дополнительно) Изменение цвета содержимого в строке состояния, только белый или черный.
- (UIStatusBarStyle)preferredStatusBarStyle
{
if (youWantWhiteColor)
{
return UIStatusBarStyleLightContent;
}
return UIStatusBarStyleDefault;
}
В этом обходном пути не используется частный API, поэтому вы в безопасности.: -)
Я сделал это расширение, чтобы изменить цвет строки состояния
public extension UIViewController {
func setStatusBar(color: UIColor) {
let tag = 12321
if let taggedView = self.view.viewWithTag(tag){
taggedView.removeFromSuperview()
}
let overView = UIView()
overView.frame = UIApplication.shared.statusBarFrame
overView.backgroundColor = color
overView.tag = tag
self.view.addSubview(overView)
}
}
Вот использование в любом месте viewcontroller:
setStatusBar(color: .red)