A barra de status não vai desaparecer

112

Estou criando um aplicativo e quero que a barra de status seja ocultada. Quando eu testo o aplicativo, a barra de status fica oculta enquanto a tela inicial é exibida, mas quando o aplicativo está totalmente carregado, a barra de status reaparece.

Estou usando o Xcode 5 e o iOS 7 e tentei desabilitar a barra de status programaticamente

  ([[UIApplication sharedApplication] setStatusBarHidden:YES    
      withAnimation:UIStatusBarAnimationFade];),

no arquivo info.plist e usando o inspetor de atributos no arquivo .xib. Nada parece funcionar.

Alguma ideia?

user2397282
fonte

Respostas:

220

Tente adicionar o seguinte método ao controlador de visualização raiz do seu aplicativo:

- (BOOL)prefersStatusBarHidden
{
    return YES;
}
Quentin
fonte
2
Como fazer isso globalmente?
jjxtra de
16
Além disso, conforme declarado nos documentos da Apple, você deve chamar o [self setNeedsStatusBarAppearanceUpdate];depois de chamar esse método com algo diferente do valor padrão (o valor padrão é NÃO).
manderson
3
@PsychoDad Verifique minha resposta para uma solução mais global.
Idan
2
Perfeito, obrigado. Eu simplesmente não consigo entender porque o iOS 7 está fazendo isso e não respeitando os XIBs que NÃO contêm configurações da barra de status!
justinhartman
1
Adicionar isso a um ViewController adicionado à pilha é tudo que eu preciso para ocultar a barra de status naquele viewcontroller; a barra de status retorna quando este viewcontroller é removido.
MacD
126

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

Isso permitirá que você defina a barra de status para o modo oculto . Isso o define como global, ao contrário de outras respostas fornecidas.

ATUALIZAÇÃO: Se você deseja que a barra de status fique oculta na tela inicial, não se esqueça de marcar " Ocultar durante a inicialização do aplicativo " nas opções da barra de status de destino. Além disso, você pode adicionar " Barra de status está inicialmente oculta " a " SIM " na plist se não quiser fazer isso com o código dentro do aplicativo.

Idan
fonte
2
Levei muito tempo para descobrir isso. É um problema que acho que todos teriam e a Apple não o mencionou o suficiente. Fico feliz em ajudar ...
Idan
7
funciona bem, não se esqueça de definir o valor .plist para "A barra de status está inicialmente oculta" como SIM.
andreas-supersmart
1
Uau, essa foi a única coisa que funcionou com Kobold2d 2.1.0 e iOS 7, muito obrigado!
Binarian
5
A Apple não é realmente campeã de compatibilidade com versões anteriores. Vamos todos dançar sua flauta e atualizar cada um de nossos aplicativos. Desculpe, extravasando frustração. Causado pela Apple.
Henrik Erlandsson
1
finalmente funciona para mim. Porque - (BOOL) prefere o método statusbarhidden que não funciona no modelview.
utkal patel de
73

O código que você postou funciona para iOS 6.1 e anteriores. Para iOS 7, a Apple disponibilizou novos métodos para controlar diretamente a barra de status de cada visualização. Desativar esta opção em seu Info.plist permitirá que você oculte a barra de status, pelo menos para o Developer Preview atual (4).

Adicione isso e defina como NÃO

Para referência, dê uma olhada no guia de transição do iOS 7 que está disponível no portal do desenvolvedor da Apple.

Sven
fonte
3
Na minha opinião, essa resposta é melhor porque no meu aplicativo, eu só quero ocultar a barra de status no modo paisagem, obrigado!
Son Nguyen
obrigado, isso me ajuda, pois eu quero ocultá-lo para todo o meu aplicativo
kevinl
2
Na minha opinião, esta resposta deve ser a melhor resposta -> É explicado aqui developer.apple.com/library/prerelease/ios/documentation/…
marceloquinta
5
Eu fiz isso, mas parece que acabou de ocultar a barra de status, no entanto, meu aplicativo ainda está 'empurrado para baixo' pela quantidade de espaço que a barra de status ocuparia e ainda posso ver o indicador de bateria!
Vedran
36

bem, tento ocultar a barra de status em todo o meu aplicativo e no "app" -info.plist e adiciono duas linhas no dicionário "Lista de propriedades de informações" adiciono "Ver aparência da barra de status baseada no controlador" defina NÃO e em " A barra de status está inicialmente oculta "defina SIM e para mim funciona n_n '

plist info

user_Dennis_Mostajo
fonte
2
Isso força seu aplicativo a um modo de compatibilidade projetado exclusivamente para fazer aplicativos antigos rodarem como pretendido no iOS 7, quando os desenvolvedores não têm tempo para consertar o aplicativo para a nova maneira de fazer as coisas. Em vez disso, você precisa implementar os métodos prefer * em seus controladores de visualização.
lhunath de
17

No entanto, se você usar UIImagePicker, a barra de status aparecerá novamente.

Nesse caso, você deve ocultar a barra de status conforme abaixo,

- (void)imagePickerController:(UIImagePickerController *)aPicker didFinishPickingMediaWithInfo:(NSDictionary *)info {

// for iOS7
    if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {

        [[UIApplication sharedApplication] setStatusBarHidden:YES];
    }
sozinho
fonte
2
Estou tendo o mesmo problema. A barra de status fica oculta até que eu use o UIImagePicker. Tentei sua solução e não está funcionando para mim. Eu preciso adicionar algo além do código em sua postagem?
Dev01
@WootWoot Eu também adicionei - (BOOL) prefersStatusBarHidden {return YES; } para ver os controladores. Por favor tente.
sozinho em
não parece funcionar para mim ... você deveria ligar setNeedsStatusBarAppearanceUpdate?
RyanM
Preciso ocultar a barra de status com um clique de botão. Tentei o código abaixo, mas não funcionou. Alguém por favor pode me ajudar. [[UIApplication sharedApplication] setStatusBarHidden: YES];
janitheshan
8

Depois de uma longa busca, finalmente encontrei uma solução muito simples que também resolve o UIImagePickerControllerproblema.

Conforme mencionado nas outras respostas, defina sua barra de status oculta em seu AppDelegate didFinishLaunching e defina "Exibir aparência da barra de status baseada no controlador" como NÃO.

Então, em seu AppDelegate:

- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame
{
      [application setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}

et voila - sua barra de status permanecerá oculta mesmo quando o UIImagePickerController estiver em primeiro lugar.

Isso é melhor do que "ocultá-lo" toda vez que você apresentar um UIImagePickerController, pois ele permanece oculto em todo o aplicativo.

ikuramedia
fonte
2
Embora algo ainda pareça quebrado no iOS7 no iPad, pelo menos - o UIImagePickerController ainda exibe uma barra de status na segunda vez que é mostrado ... Hurrrr ... :-( Atualmente estou usando o appDelegate junto com escondendo-o novamente em cada viewWillAppear . Portanto, mesmo que pareça sujo por um curto período, será corrigido novamente rapidamente.
ikuramedia
1
Este é o único método que funcionou para mim no iOS8 ... de alguma forma, prefersStatusBarHidden não é chamado no meu controlador de visualização.
mojuba
7

Para ocultar a barra de status em um UIViewController específico, basta adicionar:

-(BOOL)prefersStatusBarHidden
{
    return YES;
}

Espero que isto ajude !

Mike Gledhill
fonte
!! Esta é a solução que funcionou para mim no iOS 9.2, modificar o plist não surtiu efeito.
mico
5

Você pode ocultar do resumo do projeto. há uma caixa de seleção ocultar durante o lançamento.

Veja o instantâneo

insira a descrição da imagem aqui

sohail.hussain.dyn
fonte
4

Eu encontrei essa solução para mim. Ele funciona como um encanto. Escreva este código em seu viewcontroller no qual deseja usar o UIImagePickerController.

- (void)viewWillDisappear:(BOOL)animated
{
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}
- (void)viewWillAppear:(BOOL)animated
{
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
     }
xevser
fonte
3

Além da resposta acima, certifique-se de implementar o método imagePickerControllerDidCancel e adicionar o mesmo código lá também.

Vigarista
fonte
2

Eu estava tendo problemas com o UIImagePicker também. Semelhante à resposta de Alones, minha solução foi a seguinte. Eu adicionei esta linha ou código:

[[UIApplication sharedApplication] setStatusBarHidden:YES];

para esta função:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated

Não testei isso com iOS 6 ou anterior, mas funciona muito bem no iOS 7.

Dev01
fonte
2

Solução rápida

basta adicionar isso aos seus controladores de visualização:

override func prefersStatusBarHidden() -> Bool {
    return true
}
Dan Beaulieu
fonte
0

Estou usando o Xcode 6, esta solução funciona no iOS 7 e 8 para mim:

Primeiro, defina "Exibir aparência da barra de status com base no controlador" como NÃO no arquivo plist.

Em segundo lugar, em AppDelegate, adicione isto:

- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame
{
      [application setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}
RRN
fonte
0

Meu problema era que eu usei a contenção do controlador de visualização. Apenas o controlador de visualização superior, que está embutido em um controlador de navegação, por exemplo, pode ocultar ou mostrar a barra de status.

testando
fonte