Tenho uma configuração bastante básica com um UINavigationController dentro de um UITabBarController. Estou querendo fazer o layout de modo programático da visualização do rootViewController desse navcontroller, mas quando vejo self.view.frame dentro de viewDidLoad, obtenho isto (em paisagem , por exemplo):
1. view frame: {{20, 0}, {748, 1024}} // looks like an odd portrait mode
Então Eu faço a rotação automática para Retrato e obtenho isto:
2. view frame: {{0, 0}, {768, 911}}
Então, quando eu volto para a Paisagem, o quadro agora é este:
3. view frame: {{0, 0}, {1024, 655}}
E outros eventos de auto-rotação irão alternar entre os valores de quadro # 2 e # 3.
Para contornar a estranheza de # 1, estou atualmente fazendo isso em viewDidLoad:
if (UIInterfaceOrientationIsPortrait(self.interfaceOrientation)) {
self.view.frame = CGRectMake(0, 0, 768, 911);
} else {
self.view.frame = CGRectMake(0, 0, 1024, 655);
}
Sinto que estou obviamente faltando algo aqui. Por que o quadro padrão da vista não coincide com o quadro quando ele gira automaticamente de volta para a mesma orientação? O quadro de exibição não foi definido para a orientação inicial? Muito confuso ...
Devo mencionar que nenhuma das opções acima, incluindo meu hack desajeitado, muda nada visualmente. A razão de eu ter o hack é para que, ao fazer o layout de meus subviews nesta visualização, eles sejam baseados em onde eu espero que estejam, que é o canto superior esquerdo logo abaixo da barra de navegação.
O que estou fazendo de errado?
ATUALIZAÇÃO: desligar todas as coisas de dimensionamento automático na visualização altera o resultado nº 1 para ser:
view frame: {{0, 0}, {748, 1024}}
Parece um pouco mais perto, mas ainda não corresponde ao nº 3.