Não sei por que UIView está sendo cutucou-se em cerca de 10px
Pergunta
Eu criei um aplicativo simples iPhone, que tem dois arquivos .xib. No delegado app no ??aplicativo fez terminar lançando I exibir o primeiro arquivo .xib chamando:
[window addSubview:myView];
e eu fazer o mesmo em uma IBAction para uma UIButton para alterar a vista para myView2.
O que eu estou achando é que há uma barra branca de cerca de 10 pixels quando eu executar o aplicativo, para ambos os pontos de vista. Eu também noto que os botões são compensadas por 10 pixels (aprox.). Então, tenho a impressão de que a visão está sendo exibido a partir de 10 pixels fora da tela e terminando curto.
Qualquer idéia de por que isso pode estar acontecendo, como posso corrigi-lo, ou como eu pode ainda depuração que está acontecendo? Eu verifiquei meus arquivos .xib e eles estão consumindo a altura total do dispositivo (isto é, sem barras brancas), de modo que este parece ser um problema dentro XCode.
EDIT: Eu já reduzimos o problema um pouco. Eu estou usando dois métodos para carregar o subexibição. Quando eu carregar a primeira vista dentro applicationDidFinishLaunching
está tudo bem. No entanto, se eu substituir as duas mensagens para window
com o método [self originalView]
, então tudo vai um pouco derem errado.
- (void)applicationDidFinishLaunching:(UIApplication *)application {
//[self originalView]; <- I want to use this instead of the following two lines
// Override point for customization after app launch
[window addSubview:viewController.view];
[window makeKeyAndVisible];
}
-(void)endView{
endV = [[EndViewController alloc] initWithNibName:@"EndView" bundle:nil];
[window removeFromSuperview];
[window addSubview:endV.view];
}
-(void)originalView{
viewController = [[MyAppViewController alloc] init];
[window removeFromSuperview];
[window addSubview:viewController.view];
}
Pelo que posso ver, estou sempre chamando as mesmas linhas de código, não importa se é dentro do applicationDidFinishLaunching
ou em [self originalView]
mas parece que window
está a transformar-se um objeto diferente.
Solução
Ao usar um UIViewController a maneira normal (ou seja, empurrando-o em um UINavigationController ), ajusta quadro do seu ponto de vista.
Uma vez que você está adicionando o subexibição manualmente, você tem que ajustar o quadro de si mesmo. A origem está no canto superior direito (no topo da barra de status). Você quer mudar seu ponto de vista 20 pixels para baixo.
Outras dicas
Aqui está a minha solução:
// adjust the frame of subview which is going to be add
self.navController.view.frame = CGRectMake(0, 0, 320, 460);
[self.view addSubView:self.navController.view];
Ele funciona muito bem para mim agora, boa sorte ~:)
No construtor de interface, você pode adicionar Simulado elementos da interface que será exibida programaticamente (como a barra de status ou a barra de navegação). Em seu inspector, selecione seu ponto de vista, e vá para a guia Atributos. Aqui você pode simular A barra de status, a barra superior, ou uma barra inferior.
Parece que você chamam pushVC a esta UIViewController
no lugar errado. Eu tive o mesmo problema. Foi resolvido movendo [self.navigationController pushViewController: animated:]
de viewDidLoad
para viewDidAppear:
em um UIViewController
anterior na hierarquia.
Sempre que um estranho aparece gap, ou o ponto de vista é parcialmente escondido atrás da barra de status, que tem algo a ver com qualquer
- definição shouldAutorotate em seu controlador raiz - não tenho certeza se é um bug ou não, mas tente ficar consistente com o retorno dessa função para todas as sub-viewcontrollers (geralmente resulta em um viewcontroller sendo escondido por trás da barra de status)
- uma definição wantsFullscreen de um subexibição - definido como NO, se possível
i teve ambos os erros em meu aplicativo e resolveu-los! Espero que eu poderia poupar algum tempo (I desperdiçado muito nele)