Não é possível ocultar a barra de status no iOS7

267

Acabei de atualizar meu iPhone 5 iOS 7 para a versão beta quatro. Agora, quando executo meu aplicativo do Xcode 5 neste iPhone, a barra de status não oculta, mesmo que deva.

Não está funcionando:

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

Não está funcionando:

[UIApplication sharedApplication].statusBarHidden = YES;

Não é possível fazer login nos fóruns de desenvolvedores da Apple

Melih Büyükbayram
fonte
15
Falsa, minha resposta envolveu o Xcode e isso foi mostrado ao público em geral. É muito geral para dizer 'se você responder a isso, é uma violação do NDA' .. permitem que os desenvolvedores decidir isso por si ;-)
Jake
possível duplicado da barra de status não vai desaparecer
ekhumoro
como ocultar barra de status programaticamente ViewController particular?
precisa saber é

Respostas:

558

no arquivo plist dos aplicativos, adicione uma linha chamada "Visualizar aparência da barra de status com base no controlador" e defina-a como NÃO

Observe que isso simplesmente não funciona, se você estiver usando o UIImagePickerController no aplicativo.

de http://www.openfl.org/developer/forums/general-discussion/iphone-5ios-7-cant-hide-status-bar/ , de mgiroux solução

Um exemplo adicionando o View Base Controller às suas configurações de informações no Xcode

satgi
fonte
3
Surpreendente! Eu perco horas com este! Obrigado!
Idan
12
Para referência, é chamado o valor bruto armazenado no arquivo Info.plist real UIViewControllerBasedStatusBarAppearance.
Adam Rosenfield
55
O único problema com essa abordagem é que, se você usar o UIImagePickerController para selecionar imagens, ela forçará a barra de status a aparecer mais uma vez. A única maneira certa de evitar isso é implementar o método prefersStatusBarHidden em cada um dos controladores de exibição e redefinir o UIViewControllerBasedStatusBarAppearance configuração de plist para ser verdadeiro.
21413 Jason Fuerstenberg
5
Eu realmente não sei por que a Apple mudou isso! Obrigado :)
Mohamed Amine
18
Você também precisa definir Status bar is initially hiddencomo SIM .
Zorayr
277

Adicione método no seu controlador de exibição.

- (BOOL)prefersStatusBarHidden {
    return YES;
}
invoodoo
fonte
35
Para todos aqueles que procuram, esta é a maneira de fazer isso, se você deseja remover dinamicamente a barra de status em determinadas visualizações. Este método funciona independentemente do que você definir "Exibir aparência da barra de status baseada no controlador" no seu plist!
Mr. T
2
+1 b / c Estou procurando a capacidade de mostrar / ocultar dinamicamente a barra de status. O método de configuração da lista P (veja a publicação de @Satgi acima) é, no entanto, a melhor maneira de mostrar / ocultar a barra de status globalmente.
JonnyB
Se você tem uma galeria de fotos em algum lugar, geralmente deseja ocultar os controles apenas lá e também pode ativar / desativar. Isso não funciona para mim, a função nem é chamada. Eu tenho no mesmo lugar um preferredStatusBarStyle e é chamado
Cristi Baluta
4
@ Mr.T No iOS 8, parece não ser mais o caso. Se você configurou a aparência da barra de status baseada no controlador de exibição como NO e retornou true de prefersStatusBarHiddenum controlador de exibição, isso não funcionaria. A barra de status ainda aparece.
Isuru
1
@Isuru, por que você definiu NÃO? Se você definir YES, perguntaria a todos os controladores de exibição em outro caso, é claro que não.
invoodoo
84

No Plist, adicione as seguintes propriedades.

-> Status bar is initially hidden= SIM

-> View controller-based status bar appearance= NÃO

Adicione ambos - agora a barra de status desaparecerá.

user1179912
fonte
Sim, isso funcionou para mim também. Sem definir a opção "Barra de status inicialmente oculta" para SIM, não está funcionando conforme o esperado. THX.
AndrewShmig
53

Para ocultar a barra de status em uma exibição única, você deve usar:

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

No começo, isso não funcionou para mim e, em seguida, uma serra na documentação deste método que diz: // A configuração statusBarHidden não faz nada se seu aplicativo estiver usando o sistema de barra de status padrão baseado em UIViewController.

Isso deve ser feito no arquivo plist, adicionando a chave View controller-based status bar appearancedefinida como NO. E então deu certo.

Debora Fortini
fonte
16

Para usar o método UIApplication herdado para ocultar / mostrar a barra de status, seu aplicativo deve definir um valor essencial para o iOS 7:

View-Controller Based Status Bar Appearance = NO

Este valor é definido como YES por padrão. Se você alterar para NÃO, poderá usar os métodos herdados. Se você deixar definido como YES, ainda poderá ocultar a barra de status, mas cabe a cada subclasse do controlador de exibição em seu aplicativo substituir: prefersStatusBarHiddenretornar YES.

Sempre que seu aplicativo precisar que a aparência ou a visibilidade da barra de status seja alterada, e a Aparência da barra de status com base em controlador de exibição esteja definida como SIM, seu controlador de exibição mais externo precisará chamar:

setNeedsStatusBarAppearanceUpdateAnimation

jaredsinclair
fonte
Eu tive de aplicar em iOS Propriedades alvo personalizados, porque no plist geral não funcionou
xarly
16

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

  1. inaplicação: (UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptionsgravação

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

    View-Controller Based Status Bar Appearance = NO
Shaik Riyaz
fonte
2
Apenas para limpar isso, se você estiver colocando isso dentro do didFinishLaunching, basta escrever [application setStatusBarHidden:YES];ouapplication.statusBarHidden = YES;
joel.d
pode haver um erro de digitação na resposta acima. "Aparência da barra de status baseada em controlador de exibição = NÃO" não funcionou para mim, mas "Aparência da barra de status baseada em controlador = NÃO" funcionou.
tmr
11

Existem muitas combinações sugeridas para esse problema, mas o problema é que o iOS 6 e 7 usam métodos diferentes para ocultar a barra de status. Nunca consegui definir com êxito as configurações do plist para ativar o comportamento no estilo iOS6 no iOS 7, mas se você estiver criando seu aplicativo para oferecer suporte ao iOS 6+, precisará usar três métodos ao mesmo tempo para garantir que um determinado controlador de exibição oculte o status Barra:

// for ios 7 
- (BOOL)prefersStatusBarHidden{
    return YES;
}

// for ios 6
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [[UIApplication sharedApplication] setStatusBarHidden:YES];
}
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    // explicitly set the bar to show or it will remain hidden for other view controllers
    [[UIApplication sharedApplication] setStatusBarHidden:NO];
}

Isso deve funcionar independentemente das configurações do seu plist.

SaltyNuts
fonte
7

Eu tive que fazer as duas alterações abaixo para ocultar a barra de status:

Adicione este código ao controlador de exibição em que deseja ocultar a barra de status:

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

Adicione isso ao seu arquivo .plist (vá para 'informações' nas configurações do seu aplicativo)

View controller-based status bar appearance --- NO

Em seguida, você pode ligar para esta linha para ocultar a barra de status:

[[UIApplication sharedApplication] setStatusBarHidden:YES];
Peter Y
fonte
6

Basta adicionar essas 2 linhas no arquivo info.plist. Ele fará a correção para iOS7 e versões anteriores.

  • A barra de status está inicialmente oculta = SIM
  • Exibir aparência da barra de status baseada no controlador = NÃO

Navegue até o projeto e selecione Destinos -> Geral e veja a caixa de seleção "Estilo da barra de status ... Ocultar durante o lançamento do aplicativo". Isso vai funcionar.

Sid
fonte
6

Tente este método simples:

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

- (void)viewWillDisappear:(BOOL)animated
{
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
}
Rajesh Loganathan
fonte
4

A única coisa que funcionou para mim é adicionar o seguinte na sua lista

<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
Bartburkhardt
fonte
4

O método mais fácil que eu encontrei para esconder a barra de status ao longo de todo o aplicativo é criando uma categoryno UIViewControllere substituindo prefersStatusBarHidden. Dessa forma, você não precisa escrever esse método em todos os controladores de exibição.

UIViewController + HideStatusBar.h

#import <UIKit/UIKit.h>

@interface UIViewController (HideStatusBar)

@end

UIViewController + HideStatusBar.m

#import "UIViewController+HideStatusBar.h"

@implementation UIViewController (HideStatusBar)

//Pragma Marks suppress compiler warning in LLVM. 
//Technically, you shouldn't override methods by using a category, 
//but I feel that in this case it won't hurt so long as you truly 
//want every view controller to hide the status bar. 
//Other opinions on this are definitely welcome

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

#pragma clang diagnostic pop


@end
Mike
fonte
o melhor real, iOS7, solução não fakey, grande
Fattie
3
  1. Em plist add ----

    Exibir a aparência da barra de status baseada no controlador --- NÃO

  2. Em cada viewController write

    - (void) viewDidLayoutSubviews
    {
        CGRect viewBounds = self.view.bounds;
        CGFloat topBarOffset = 20.0;
        viewBounds.origin.y = -topBarOffset;
        self.view.bounds = viewBounds;
    
        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];//for status bar style
    }

Para problemas na barra de status no iOS 7, mas o destino deve ser 5.1 ou superior para o aplicativo

Maulik
fonte
3

Muitas das respostas desse thread funcionam, mas é do meu entendimento que se você estiver tentando fazer algo dinâmico, precisará chamar:

[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
darkheartfelt
fonte
3

Etapas para ocultar a barra de status no iOS 7:

1. Acesse o arquivo info.plist do aplicativo.

2.E definir, exibir a aparência da barra de status baseada em controlador: Booleano NÃO

Espero ter resolvido o problema da barra de status .....

Chandrika
fonte
3

Para iOS 7 em uma única visualização, use o método viewWillappear:

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

Para exibir a barra de status, use:

[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:NO];
oscar castellon
fonte
3
-(BOOL)prefersStatusBarHidden
{
    return YES;
}
Thunderbird
fonte
2

No arquivo Info Plist, adicione uma linha para a seguinte propriedade

Nome da propriedade: Exibir a aparência da barra de status baseada em controlador

Valor: NÃO

user842553
fonte
1

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

- (BOOL)prefersStatusBarHidden
    {
        return YES;
    }
Bhoopi
fonte
1

Eu tentei todas essas opções postadas aqui no meu projeto e elas não funcionariam. Eu pensei que isso poderia ter a ver com o fato de eu ter atualizado meu Xcodee, em seguida, o aplicativo para iOS 7 e algumas configurações terem sido alteradas em algum lugar. Eu decidi criar um projeto completamente novo para ele e, após uma simples configuração: " Status bar is initially hidden = YES" e " View controller-based status bar appearance = NO", como declarado por muitos outros, funcionou corretamente (ou seja, nenhuma barra de status).

Portanto, meu conselho se você estiver trabalhando em um projeto que foi atualizado para iOS 7 a partir de uma versão antiga e tentou todas as outras opções é criar um novo projeto.

user1529408
fonte
Usei essa mesma técnica para confirmar inicialmente que eu poderia ocultar a barra de status globalmente, para todas as telas, mas como meu aplicativo é bastante "centrado no tempo", eu queria a exibição do tempo para a maioria das telas. É apenas uma tela que eu queria excluir por várias razões. Acabei usando o oposto de seus parâmetros: inicialmente oculto = NO & aparência da barra de status baseada em VC = SIM. Então eu tive que colocar o método (BOOL) prefersStatusBarHidden (retornando YES) no VC onde eu queria que ele estivesse oculto. Funciona bem. Devo acrescentar que meu aplicativo é apenas para iOS7 por outros motivos.
bobsmells
1

Para 2019 ...

Para criar um aplicativo sem barras de status,

Clique em info.plist, clique com o botão direito do mouse em "Adicionar linha".

Adicione estes dois, com estas configurações:

insira a descrição da imagem aqui

É tudo o que há para isso.

Fattie
fonte
0

Para Swift 2.0+ IOS 9

override func prefersStatusBarHidden() -> Bool {
return true
}
Irshad Qureshi
fonte
0

Para ocultar a barra de status para um viewController específico

- (BOOL)prefersStatusBarHidden {
    return YES;
}

Para definir a barra de status Oculto para o aplicativo:

  • definido View controller-based status bar appearancecomo NO.plist e no application: didFinishLaunchingWithOptions:conjunto: [application setStatusBarHidden:YES];

    Nota: setStatusBarHidden: descontinuado

OU

  • em Configurações do projeto -> Guia Geral -> Informações de implantação

    Verifique Hide Status barcaixa.

Lal Krishna
fonte
-1
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
application.statusBarHidden = YES;
return YES;
}
Evan Ische
fonte
A pergunta menciona explicitamente que essa abordagem não funciona. Por favor, leia a pergunta cuidadosamente antes de responder.
Borys Verebskyi
Desde que a aparência da barra de status com base no controlador esteja definida como NÃO, é a abordagem mais limpa.
Evan Ische 8/09/16
-7

Não sei por que você "não pode acessar os Fóruns de desenvolvedores da Apple", mas (sem violar o NDA) também pode ocultar sua barra de status através do Xcode. É uma configuração geral no destino do seu aplicativo.insira a descrição da imagem aqui

Jake
fonte
não, funciona como um encanto. os fóruns já existem há algum tempo.
Jake