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.

Susitha
fonte
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

Rajneesh071
fonte
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

Shekhar Gupta
fonte
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

Hitesh Vaghela
fonte
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.

Gumumoorthy Arumugam
fonte
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)
}
Rajesh Loganathan
fonte
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;
}
smartbot
fonte
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.
Chris
fonte
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
    
Shaik Riyaz
fonte
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

gbk
fonte
8

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

override var prefersStatusBarHidden: Bool {
    return true
}
andrewz
fonte
7

Tente isso;

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
Kemal Can Kaynak
fonte
Ó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.

Manju
fonte
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.

Esqarrouth
fonte
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;

Ketan P
fonte
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

MANISH PATHAK
fonte
4

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

buraco negro
fonte
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

Ashu
fonte
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

Jerry Chong
fonte
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

Tony
fonte
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]
smileBot
fonte
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

Prazgaitis
fonte