Por que estou tendo que definir manualmente o quadro de minha visualização em viewDidLoad?

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.

31
задан Ryan Waggoner 20 July 2011 в 04:36
поделиться