Como ocultar a barra de status do iOS


219

Na minha barra de status do aplicativo de vídeo do iOS, ela está oculta em alguns controladores de exibição. Eu fiz isso usando o código a seguir.

[[UIApplication sharedApplication] setStatusBarHidden:YES];
  • Funciona no iOS 5 e iOS 6, mas não no iOS 7.

  • Eu tentei com isso em particular, controlador de exibição,

Por exemplo:

-(BOOL)prefersStatusBarHidden { return YES; }

Funciona bem, mas não consigo mostrar a barra de status novamente no controlador de exibição pai.



1
Se o estilo da barra de status estiver definido no Storyboard, depois de alterar a "Barra de status com base no controlador de exibição" (abaixo), talvez seja necessário definir o estilo no plist porque a configuração do controlador de exibição não será mais usada. stackoverflow.com/questions/18924345/…
Matt

1
Eu respondi em outra pergunta. Tente isso. [Barra de status maneira mais fácil de esconder programaticamente] [1] [1]: stackoverflow.com/a/27339754/3718498
wataru

1
Eu usei um truque para isso - eu publicou como pod cocoapods.org/pods/UIViewController+ODStatusBar , espero que seja útil para qualquer um
Alex Nazarsky

As respostas aqui foram descontinuadas. Ocorreu um problema ao encontrar a resposta correta para o iOS 9 ao ocultar a barra de status PARA APENAS A TELA DE LANÇAMENTO , portanto, faça o link abaixo para que seja mais fácil que outras pessoas descubram como fazer isso: stackoverflow.com/questions/34413848/…
Ben

Respostas:


277

Você deve adicionar este valor ao plist: " Exibir aparência da barra de status baseada no controlador " e configurá-lo para " NÃO ".

enter image description here


40
Para referência, a chave bruta éUIViewControllerBasedStatusBarAppearance
William Denniss 10/10

1
@ Rajneesh071 O que eu preciso fazer se eu quiser definir o preferidoStatusBarStyle para o trabalho que eu preciso "View controller-based status bar appearance" set it to "YES".?
Bimawa


que problema você está enfrentando?
precisa

parece obsoleto, vontade quebra seu aplicativo
Ben

194

Adicione o seguinte ao seu Info.plist:

<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

Imagem


Trabalhando bem no Xcode 11.3, iOS 13
Wayne Henderson

113

Adicione a seguinte linha no viewdidload

  [[UIApplication sharedApplication] setStatusBarHidden:YES
                                        withAnimation:UIStatusBarAnimationFade];

e adicione novo método

  - (BOOL)prefersStatusBarHidden {
          return YES;
  }

alterar também o arquivo info.plist Exibir a aparência da barra de status baseada no controlador "= NÃO

funciona para mim


Thanx este trabalhando para mim, mas eu preciso adicionar abaixo da linha no plist também. "Exibir aparência da barra de status com base no controlador" = NÃO i, e Adicione a seguinte linha em viewdidload [[UIApplication sharedApplication] setStatusBarHidden: YES withAnimation: UIStatusBarAnimationFade]; e adicione novo método - (BOOL) prefersStatusBarHidden {return YES; } Adicionar "Exibir aparência da barra de status baseada em controlador" = NÃO no arquivo Plist
sandy

prefersStatusBarHiddené o que fez o truque para mim (se com esta solução de com outros semelhantes)
Abdo

34

No Plist, adicione as seguintes propriedades.

Status bar is initially hidden = YES

View controller-based status bar appearance = NO

agora a barra de status ficará oculta.


8
Chaves matérias seria UIStatusBarHidden e UIViewControllerBasedStatusBarAppearance
leolobato

27

Tente este método simples:


Objetivo-C:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated]
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated]
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
}

Rápido:

override func viewWillAppear(animated: Bool) 
{
    super.viewWillAppear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.None)
}

override func viewWillDisappear(animated: Bool) 
{
    super.viewWillDisappear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.None)
}

1
Esta foi uma resposta maravilhosa! Tente também com os vários UIStatusBarAnimations, eles são ótimos.
VedTopkar

Não se esqueça [super viewWillAppear:animated]e[super viewWillDisappear:animated]
SamB 22/07

1
Esta solução simples funcionou para mim iOS 10. Maneira de ser homem simples!
coolcool1994

14

Fiz o seguinte e parece funcionar (mesmo no iOS 8):

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {

        [[UIApplication sharedApplication] setStatusBarHidden:YES];
    }
}

- (BOOL)prefersStatusBarHidden {
    return YES;
}

12
  • UIApplication.setStatusBarX está obsoleto a partir do iOS9
  • Foi preterido ter UIViewControllerBasedStatusBarAppearance = NO em seu info.plist
  • Portanto, devemos usar o preferidoStatusBarX em todos os nossos controladores de exibição

Mas fica mais interessante quando há um UINavigationController envolvido:

  • Se navigationBarHidden = true, o childStatusBarX preferido de UIViewController é chamado, pois o filho está exibindo o conteúdo na barra de status.
  • Se navigationBarHidden = false, oStatusBarX preferido do UINavigationController é chamado, afinal ele está exibindo o conteúdo na barra de status.
  • O preferencialStatusBarStyle padrão do UINavigationController usa o valor de UINav.navigationBar.barStyle. .Default = conteúdo da barra de status preta, .Black = conteúdo da barra de status branca.
  • Portanto, se você estiver configurando barTintColor para alguma cor personalizada (o que provavelmente é), também será necessário definir barStyle como .Black para obter o conteúdo da barra de status em branco. Eu definiria barStyle como preto antes de definir barTintColor, caso o barStyle substitua o barTintColor.
  • Uma alternativa é que você pode subclassificar UINavigationController em vez de mexer no estilo da barra.
  • NO ENTANTO, se você subclassificar UINavigationController, não terá controle sobre a barra de status se navigationBarHidden = true. De alguma forma, o UIKit vai direto para o filho UIViewController sem perguntar ao UINavigationController nessa situação. Eu teria pensado que deveria ser responsabilidade do UINavigationController pedir à criança> encolher os ombros <.
  • E o UIViewController exibido de forma modal apenas dá uma opinião na barra de status se modalPresentationStyle = .FullScreen.
  • Se você possui um controlador de exibição modal no estilo de apresentação personalizado e deseja realmente controlar a barra de status, é possível definir modalPresentationCapturesStatusBarAppearance = true.

Por que a apple não pode apenas seguir um conselho? Se não estiver quebrado, não conserte!
precisa saber é o seguinte

9

Para ocultar a barra de status no iOS7, você precisa de 2 linhas de código

  1. no aplicativo: (UIApplication *) aplicativo didFinishLaunchingWithOptions: (NSDictionary *) launchOptions write

     [[UIApplication sharedApplication] setStatusBarHidden:YES];
    
  2. em info.plist adicione isto

     View-Controller Based Status Bar Appearance = NO
    

8

Para uma melhor compreensão, adicione algumas fotos com comentários:

App antes de qualquer alteração

insira a descrição da imagem aqui

Encontrado na sua Project Navigatorpasta nomeada Supporting Filese clique no arquivo * .plist

insira a descrição da imagem aqui

Depois que você terá uma configuração diferente do seu aplicativo mostrado. Você precisa adicionar 2 chaves UIStatusBarHiddene UIViewControllerBasedStatusBarAppearance. Você pode fazer isso simplesmente clicando no botão +

insira a descrição da imagem aqui

Depois de pressionar +, você pode escolher uma das teclas - basta começar a digitar.

Versão correta:

insira a descrição da imagem aqui

E, finalmente, a aplicação depois de aplicar essas alterações:

insira a descrição da imagem aqui

Além disso, você pode encontrar uma solução alternativa aqui


8

No iOS10, tudo o que eu precisava fazer era substituir o prefersStatusBarHiddenvar no meu RootViewController(Swift):

override var prefersStatusBarHidden: Bool {
    return true
}

7

Tente isso;

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];

Ótimo. Eu era capaz de usar isso para ocultar a barra de status no controlador de vista que não foi necessário em seguida, mostrá-lo uma vez que o usuário logado.
LondonGuy

5

Para ocultar sua barra de status no iOS7:

Abra seu arquivo plist, adicione uma linha chamada "Visualizar aparência da barra de status baseada no controlador" e defina seu valor como NO.


5

Aqui está a versão Swift (pré iOS9):

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.None)
}

override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.None)
}

Isso também funciona (iOS7 +):

override func prefersStatusBarHidden() -> Bool {
    return true
}

Você também precisa ligar para:

setNeedsStatusBarAppearanceUpdate()

em dizer viewDidLoad().

Observe que, se você usar um controlador SplitView ou outro containercontrolador de exibição, também será necessário que ele retorne sua classe quando for enviada childViewControllerForStatusBarHidden. Uma maneira de fazer isso é ter um var público fraco, por exemplo statusController, e devolvê-lo neste método substituído.


1
O bloco superior está obsoleto no iOS8 - use sua segunda abordagem. E obrigada! Editei o código para adicionar outra chamada obrigatória.
David H

5

A partir do iOS 9:

Como o statusBarHiddenmétodo foi preterido no iOS9, é necessário adicionar dois valores, como abaixo:

<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

ou pela interface do usuário Refre a imagem abaixo:

insira a descrição da imagem aqui

Como statusBarHiddenestá preterido no iOS9 :

@property (readwrite, não atômico, getter = isStatusBarHidden) BOOL statusBarHidden NS_ _IOS DEPRECATED (2_0, 9_0 , "Use - [UIViewController prefereStatusBarHidden]") __TVOS_PROHIBITED;


5

SOLUÇÃO FIXA PARA SWIFT 3+ (iOS 9, 10)

1- Na lista info.plist abaixo da propriedade

insira a descrição da imagem aqui

2- Cole o código abaixo no controlador Root, para

 private var isStatusBarHidden = true {
        didSet {
            setNeedsStatusBarAppearanceUpdate()
        }
    }

    override var prefersStatusBarHidden: Bool {
        return isStatusBarHidden
    }

Você pode ligar isStatusBarHidden = truee isStatusBarHidden = falseonde deseja a hide/showbarra de status


4

Você deve adicionar este valor ao plist: "Exibir aparência da barra de status baseada no controlador" e configurá-lo para "NÃO".


4

Etapas para ocultar a barra de status no iOS
1. abra o arquivo AppDelegate.m , adicione application.statusBarHidden no método didFinishLaunchingWithOptions

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    application.statusBarHidden = YES;
    return YES;
    }
  1. abra info.plist e defina

View controller-based status bar appearance conjunto NO


4

Swift 5

Siga as etapas abaixo para ocultar a barra de status do iOS:

  1. Abra no Info.plist.
  2. Adicionar nova chave Visualizar a aparência da barra de status baseada no controlador e o valor definido como NO .
  3. Adicionar nova chave A barra de status fica inicialmente oculta e o valor é definido como YES .
  4. Recompile o projeto.
  5. A barra de status deve estar oculta no telefone iOS agora.

Captura de tela das configurações finais:

Configurações finais

Isso está funcionando no Xcode 10.2


2

De UIKit> UIApplication.h:

// Setting statusBarHidden does nothing if your application is using the default UIViewController-based status bar system.
@property(nonatomic,getter=isStatusBarHidden) BOOL statusBarHidden;
- (void)setStatusBarHidden:(BOOL)hidden withAnimation:(UIStatusBarAnimation)animation NS_AVAILABLE_IOS(3_2);

Portanto, deve definir View controller-based status bar appearancecomo NO


2

Para responder à pergunta da Susitha: use setNeedsStatusBarAppearanceUpdate . Isso fará uma chamada para prefersStatusBarHidden para atualizar com o estado da barra de status desejado. Tente o seguinte:

    @property (nonatomic, getter=isHideStatusBar) BOOL hideStatusBar; // Give this a default value early

    - (BOOL)prefersStatusBarHidden {
        return self.isHideStatusBar;
    }

    - (void)someMethod {
    // triggered by an event or user action
    [self setHideStatusBar:YES];
    [self setNeedsStatusBarAppearanceUpdate];
    }

Se você quiser ver a barra de status novamente, defina sua propriedade hideStatusBar (ou como quiser) como NÃO. Chame preferStatusBarHidden indiretamente, fazendo outra chamada para

[self setNeedsStatusBarAppearanceUpdate]

1

Atualização para o Swift 3:

Atualize Info.plist com as seguintes informações:

View controller-based status bar appearance: NO

Em seguida, em um ViewController ou em outro local:

UIApplication.shared.isStatusBarHidden = true

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.