No meu arquivo .plist, tenho " Exibir aparência da barra de status baseada em controlador " definida como NO
. Mas depois UIImagePickerController
, meu aplicativo se comporta como se a opção estivesse definida como YES
.
No meu aplicativo, apresento um VC que apresenta um UIImagePickerController
.
O problema acontece assim:
- Depois que o seletor de fotos é apresentado, quando uma biblioteca de fotos é selecionada, a cor do texto da barra de status muda.
- Então, uma vez
UIImagePickerController
descartado, o espaçamento da barra de status muda para o restante do meu aplicativo e toda a barra de navegação para outros controladores é exibida sob a barra de status.
Existe uma maneira de resolver isso sem gerenciar a barra de status em meus controladores de exibição?
Respostas:
Nenhuma das soluções acima funcionou para mim, mas, combinando as respostas de Rich86man e iOS_DEV_09, eu tenho uma solução que trabalha consistentemente:
e
Em relação a esta solução impressionante. Para 2014 / iOS8, encontrei em alguns casos, você TAMBÉM precisa incluir
prefersStatusBarHidden
e, possivelmente,childViewControllerForStatusBarHidden
Então ...Espero que ajude alguém
fonte
Eu enfrentei esse mesmo problema hoje. Aqui está a minha solução.
No controlador de exibição que chama o seletor de imagens, defina-se como o representante do seletor de imagens. (Você provavelmente já está fazendo isso)
Como UIImagePickerController é um tipo de controlador de Navegação, você também está se definindo como o delegado UINavigationController. Então :
Substitua UIStatusBarStyleLightContent pelo estilo que você estiver procurando.
fonte
A resposta aceita funcionará se você tiver a opção 'Exibir aparência da barra de status baseada no controlador' definida como NÃO no seu arquivo .plist. Se você realmente precisa controlar a barra de status em alguns outros controladores de exibição e ter essa opção definida como YES, a outra maneira de fazer com que UIImagePickerController se comporte corretamente é subclassificando-a
fonte
eu enfrentei o mesmo problema.
aqui está a minha solução. coloque isso no viewWillAppear do controlador de exibição do qual você está abrindo a seleção de imagem
fonte
Você pode tentar isso Eu acho que needsStatusBarApperanceUpdate funcionará.
fonte
Achei isso para oferecer manuseio adequado, há duas partes.
o próprio UIImagePickerController apresenta os controladores de exibição, portanto, esse delegado funciona para todos os apresentadores da pilha.
o viewWillAppear assegura que o próprio controlador de exibição seja sempre redefinido sempre que um controlador de exibição apresentado for descartado acima dele.
fonte
Eu tive o mesmo problema. Adicione o info info: "Exibir a aparência da barra de status baseada no controlador" com o valor "NO"
Exemplo aqui https://stackoverflow.com/a/19211669
Esta solução funciona para mim.
fonte
Provavelmente é um bug. Resolvi o problema definindo "Visualizar aparência da barra de status baseada no controlador" definida como YES e em cada controlador de exibição colado no seguinte código:
Em seguida, meu aplicativo se comporta conforme o esperado.
fonte
Para ocultar a barra de status no UIImagePicker:
-
e quando UIImagePicker for dispensado para ocultar a barra de status no controlador de exibição, use o seguinte código:
fonte
tente isso ....
isso funcionará nos dois casos, ou seja, se você usa presentModalViewController e pushViewController
delegar métodos
fonte
Todas as opções acima não funcionaram para mim. Resolvi o problema alterando o estilo de apresentação para:
fonte
Nenhuma das soluções acima funcionou para mim.
Apresento UIImagePickerController como controlador de exibição modal. Depois de descartar UIImagePickerController, o estado da barra de status era:
A solução que corrigiu o problema para mim foi restaurar o statusBarOrientation depois de descartar o UIImagePickerController:
fonte
Esse código me ajudou a personalizar o estilo da barra de status.
EDIT: esta solução funciona se "Exibir aparência da barra de status baseada no controlador" == SIM
fonte
Todas as respostas acima estão ok e podem ajudar.
Eu tive o mesmo problema ao gerenciar o aplicativo executado em diferentes versões do iOS .
Em seguida, no delegado:
fonte
Mais uma solução que pode funcionar em algumas situações.
fonte
Você tentou ligar
[self setNeedsStatusBarAppearanceUpdate]
quando o controlador de exibição em exibição reapareceu?fonte
Tento ocultar a barra de status no UIImagePickerController no iOS7, mas ainda não sei como fazer isso. eu uso
no ViewController que chama o UIImagePickerController e defina "Exibir aparência da barra de status baseada em controlador = NÃO" no arquivo plist. Espero que isso possa ajudar.
fonte
tente isto:
e no protocolo implementar, use o seguinte:
fonte
Isso resolveu para mim ...:
fonte
Nada aqui resolveu especificamente o problema em que eu estava tendo (e talvez o OP também estivesse), então pensei em compartilhar minha resposta. Em vez de ocultar a barra de status, que eu acho que é uma solução de buggy (notei que algumas vezes deixava meu aplicativo em um estado em que a barra de status estava oculta quando não deveria). Em vez disso, optei por tentar jogar bem com o
UIStatusBarStyles
.Quando o UIImagePickerController tem sua visualização apresentada, defino o estilo da barra de status como padrão, pois a cor de plano de fundo padrão é um cinza claro.
Em seguida, quando o seletor de imagens é descartado, eu o coloco de volta em
UIStatusBarStyleLightContent
.fonte
Nesse caso, estamos usando 2 etapas
Na primeira etapa: adicione info.plist: "Exibir a aparência da barra de status com base no controlador" com o valor "NO"
Na segunda etapa: use / chame esse código com o delegado de UIImagePickerController
No caso do IOS-7, adicione mais uma função
fonte
A partir do iOS 8.1, parece que eles finalmente corrigiram esse bug! Consegui remover todas as soluções alternativas que empreguei do meu código.
fonte
Usando o comportamento padrão do iOS 8, eu estava tendo problemas com a barra de status aparecendo quando queria ocultá-la.
A solução que encontrei foi que, logo após ligar
presentPopover
do meu controlador de exibição, fiz:Eu também tive que adicionar isso ao meu controlador de exibição principal:
fonte
Então, eu tive esse problema e pude resolvê-lo simplesmente implementando uma única função de delegado. O fundo da minha barra de status é preto e, portanto, o UIStatusBarStyle para o meu aplicativo é .LightContent. Quando apresentei o UIImagePickerController para selecionar uma foto no armazenamento do dispositivo, a barra de status estava boa. No entanto, ao clicar em um diretório como "Rolo da câmera" ou "Favoritos", pressionando efetivamente a pilha de navegação, a barra de status desapareceu. Ao selecionar uma foto, não havia barra de status; ao descartar outro controlador de exibição modal, apenas a bateria estava presente, indicando que o restante da barra de status também pode estar preto.
Tentei algumas das outras soluções, como estender o UIImagePickerController, mas no Swift, você não pode substituir usando extensões. Tentei subclassificar UIImagePickerController e tentei ocultar sua barra de status em viewWillAppear () e mostrar novamente a barra de status em viewWillDisappear. Consegui ver a barra de status oculta com uma animação .Slide, mas como a barra de status estava invisível ao selecionar um diretório, não pude ver a barra de status reexibida. Mais uma vez, a bateria verde voltou com o restante da barra de status invisível ao descartar um controlador de exibição modal. Também tentei substituir preferersStatusBarHidden (), mas essa função nunca foi chamada, então tentei chamar setNeedsStatusBarAppearanceUpdate () para garantir que prefersStatusBarHidden () seja chamado pelo sistema, mas ainda não seja chamado. Além disso, existe a sugestão de definir a barra de status para ser oculta no método delegado navigationController willShowViewController. Mais uma vez, tudo isso faz é ocultar a barra de status, o que não resolve o problema. Como se vê, parece que o estilo da barra de status é alterado ao empurrar para a pilha de navegação do UIImagePickerController. Para resolver o problema completamente, não precisei escrever extensões ou subclasses UIImagePickerController. Tudo que você precisa fazer é definir o delegado e o estilo da barra de status para permanecer o mesmo. Esta adição tornou como se o problema nunca existisse. parece que o estilo da barra de status é alterado ao enviar para a pilha de navegação do UIImagePickerController. Para resolver o problema completamente, não precisei escrever extensões ou subclasses UIImagePickerController. Tudo que você precisa fazer é definir o delegado e o estilo da barra de status para permanecer o mesmo. Esta adição tornou como se o problema nunca existisse. parece que o estilo da barra de status é alterado ao enviar para a pilha de navegação do UIImagePickerController. Para resolver o problema completamente, não precisei escrever extensões ou subclasses UIImagePickerController. Tudo que você precisa fazer é definir o delegado e o estilo da barra de status para permanecer o mesmo. Esta adição tornou como se o problema nunca existisse.
fonte
Na verdade, encontrei uma maneira melhor de definir a cor de fundo da barra de status no Seletor de Imagens. Basicamente, você precisa definir a backgroundImage da barra de navegação como nula, porque o padrão no Image Picker tem uma backgroundImage como uma imagem branca.
fonte