Измените цвет фона фона в строке состояния iOS 7

Я хочу изменить цвет фона строки состояния на iOS 7, и я использую этот код:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [UIApplication sharedApplication].statusBarHidden = NO;

        self.window.clipsToBounds = YES;
        [[UIApplication sharedApplication] setStatusBarStyle: UIStatusBarStyleLightContent];
        self.window.frame =  CGRectMake(0,20,self.window.frame.size.width,self.window.frame.size.height-20);
        self.window.bounds = CGRectMake(0, 20, self.window.frame.size.width, self.window.frame.size.height);

        ...
        ...


}

Когда я пишу это, он показывает строку состояния с черным фоном; Я хочу, чтобы у него был красный фон.

Как изменить цвет строки состояния на красный фон вместо черного?

Ответы

Ответ 1

В iOS 7 и более поздних версиях строка состояния прозрачна. Установите backgroundColor вашего представления на цвет, который вы хотите для строки состояния.

Или вы можете добавить подвью 20px-high с красным цветом в верхней части вашего представления.

Подробнее см. Руководство по переходу Apple.

Кроме того, убедитесь, что ваш preferredStatusBarStyle равен UIStatusBarStyleLightContent. и в вашем Info.plist установите "Просмотр строки состояния на основе контроллера" на "НЕТ".

Ответ 2

При обработке цвета фона в строке состояния в 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];

Ответ 3

Цель c

(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    [[UIApplication sharedApplication] setStatusBarHidden:false];
    UIView *statusBar=[[UIApplication sharedApplication] valueForKey:@"statusBar"];
    statusBar.backgroundColor = [UIColor redColor];

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];



    return YES;
}

Это работает для меня. Надеюсь, это тоже поможет.

Ответ 4

для того, что предоставил @Teja Kumar Bethina, полезно, но лучше получить высоту statusBar из синтаксиса UIApplication, как показано ниже:

UIApplication *app = [UIApplication sharedApplication];

UIView *statusBarView = [[UIView alloc] initWithFrame:CGRectMake(0, -app.statusBarFrame.size.height, self.view.bounds.size.width, app.statusBarFrame.size.height)];
    statusBarView.backgroundColor = [UIColor blackColor];

Ответ 5

в приложении AppDelegate

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

и в файле project.plist проекта

установить флаг NO для просмотра строки состояния на основе контроллера в приложении.

Ответ 6

Вызовите эту функцию из передачи ViewDidLoad с цветом своей строки состояния.

func setStatusBarBackgroundColor(color: UIColor)  
{
    guard  let statusBar = UIApplication.sharedApplication().valueForKey("statusBarWindow")?.valueForKey("statusBar") as? UIView 
    else 
    {
    return
    }
    statusBar.backgroundColor = color
}

Надеюсь, это поможет.

Ответ 7

Здесь быстрое решение, использующее автоматическую компоновку. Если ваше приложение находится в портретном или альбомном представлении, ширина полосы будет правильной. Он добавлен в представление навигационной панели в виде подсмотра, поэтому он смещен на -20. Вы можете добавить его в родительский вид навигационной панели, а затем смещение не требуется. В этом примере также будет установлен цвет так же, как и на панели навигации.

Надеюсь, что это поможет:)

    // Add colored opaque view behind the status bar view
    let statusBarView = UIView()
    statusBarView.backgroundColor = navigationBar.backgroundColor
    statusBarView.translatesAutoresizingMaskIntoConstraints = false
    navigationBar.addSubview(statusBarView)

    let views = ["statusBarView": statusBarView]
    let hConstraint = "H:|-0-[statusBarView]-0-|"
    let vConstraint = "V:|-(-20)-[statusBarView(20)]"

    var allConstraints = NSLayoutConstraint.constraintsWithVisualFormat(hConstraint,
            options: [], metrics: nil, views: views)

    allConstraints += NSLayoutConstraint.constraintsWithVisualFormat(vConstraint,
            options: [], metrics: nil, views: views)

    NSLayoutConstraint.activateConstraints(allConstraints)

Ответ 8

если ваше приложение основано на навигации, тогда вы можете установить цвет фона фона состояния следующим образом:

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
[[UINavigationBar appearance] setBarTintColor:[UIColor redColor]];

может это помочь.