Vistas de alerta em retrato, iPad em paisagem e incapaz de girar para qualquer coisa, exceto "outra" paisagem (180 graus)

StackOverflow https://stackoverflow.com/questions/3816566

Pergunta

Atualizar: Resolvido. Veja Fix no fundo.

No meu aplicativo para iPad, que suporta todas as orientações, se o aplicativo for carregado na paisagem, coisas estranhas acontecem:

  1. As vistas de alerta aparecem em retrato, mesmo que o resto esteja na paisagem
  2. Girar o iPad da paisagem para o retrato não desencadeia uma rotação (nem aciona nenhum dos métodos de estilo mustial).
  3. Girar o iPad 180 graus (para "outra paisagem") aciona a rotação e, depois disso, o iPad se comporta como o normal (ou seja, gira corretamente para retrato e paisagem quando girado).

Alerta a tela de exibição abaixo. Esquisito esquisito. Alguma idéia de por que isso pode estar acontecendo? Isso só acontece ao carregar na paisagem - carregar no retrato e depois girar para a paisagem funciona muito bem.Landtrait!

Solução: Esse problema ocorreu porque eu estava adicionando um UIViewController (modalmente) no topo do controlador de exibição principal assim que o aplicativo terminou de carregar (mais especificamente, no aplicativo's viewDidAppear: método).

iOS envia um número de (4) shouldAutorotateToInterfaceOrientation: Chamadas para o controlador de exibição atual/principal após o início das coisas, para descobrir quais orientações são suportadas atualmente. Quando adicionei o outro VC tão cedo, isso ocorreu no meio das chamadas acima mencionadas. Assim, eu só recebi uma ou duas ligações (para "retrato", porque começa com retrato).

O controlador de vista principal foi deixado com um suporte padrão de "não" para as orientações da paisagem, mas o controlador de exibição recém -adicionado (que também é perguntado sobre orientações) agora responde alegremente sim.

Se eu tivesse removido o outro VC (que está na paisagem), eu teria percebido que meu controlador de visão principal estava preso no retrato. Então, eu tinha uma visão de retrato, além da qual havia uma vista da paisagem. Os alertas e tal atendiam à orientação do primeiro, daí os resultados desastrosos acima.

Além disso, se eu tentasse girar para o retrato, não podia, porque o controlador de vista principal já estava em retrato. Girar para a paisagem também era impossível porque o outro controlador de vista já está na paisagem. Somente quando fiz a rotação "paisagem, mas a outra", ambos os controladores viam que a rotação foi necessária e, portanto, o dispositivo girou.

A correção no meu caso foi simplesmente colocar a criação do outro controlador em um pequeno atraso. usando performSelector:withObject:afterDelay. - 0 parecia funcionar, mas eu apenas coloquei em 1 com certeza. Parece um pouco estranho, com o VC principal aparecendo e depois o outro VC, mas é melhor que o acima.

Foi útil?

Solução

Esse problema ocorreu porque eu estava adicionando um UIViewController (modalmente) na parte superior do controlador de exibição principal assim que o aplicativo terminou de carregar (mais especificamente, no método ViewDidappear: do aplicativo).

Veja a postagem acima para obter detalhes sobre solução.

Outras dicas

Use o uialertController em vez do uialertView. Eu tenho o mesmo problema e agora está corrigido.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top