Redimensionar UINavigationBar na rotação
-
22-07-2019 - |
Pergunta
Eu tenho uma subclasse de UIViewController que lida com um UIView. O viewcontroller é apresentado de forma modal (que desliza para cima a partir da parte inferior da tela). No topo da vista, eu adicionei uma barra de navegação. Note-se que este bar não é tratado por um controlador de navegação.
Eu quero começar a barra de navegação para encolher de altura quando a vista gira para paisagem (semelhante à forma como ele se comporta quando ele é tratado por um UINavigationController). No entanto, não pode definir sua máscara de redimensionamento automático de altura flexível na IB, e fazê-lo em código faz com que a barra de navegação para desaparecer completamente.
Existe uma maneira de fazer isso? Como é feito pela UINavigationController?
P.S. Eu preferiria não ter que recorrer a uma escala transformar, uma vez que este iria atrapalhar o texto no título.
EDIT: Eu resolvi-lo com um pouco de ajuda, leia a resposta postada abaixo
.Solução 2
Eu encontrei a solução, e em retrospectiva eu ??me sinto um pouco estúpido. Eu só tinha que incluem margem inferior flexível na máscara autoresize da barra de navegação. Crédito é devido ao usuário RayNewbie neste segmento, o que me apontou para a solução:
Outras dicas
Ao invés de conjunto é o redimensionamento automático de máscara, por que você não apenas verificar a orientação atual em viewWillAppear, bem como em didRotateFromInterfaceOrientation, e definir o quadro apropriado?
- (void) updateNavBar {
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
if ((UIInterfaceOrientationLandscapeLeft == orientation) ||
(UIInterfaceOrientationLandscapeRight == orientation)) {
myNavBar.frame = CGRectMake(0, 0, 480, 34);
} else {
myNavBar.frame = CGRectMake(0, 0, 320, 44);
}
}
- (void) viewWillAppear {
[self updateNavBar];
// ... SNIP ...
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
[self updateNavBar];
// ... SNIP ...
}