espaço estranho no topo da UINavigationController: iPhone
-
22-07-2019 - |
Pergunta
Estou tendo um problema estranho com a adição de um UINavigationController para minha aplicação do iPhone. Eu adicionar o controlador da seguinte forma:
myViewController *viewController = [[myViewController alloc] initWithNibName:@"myView" bundle:nil];
myNavigationViewController *navigationController = [[myNavigationViewController alloc] initWithRootViewController:viewController];
UIView *finalView = myeNavigationViewController.view;
[self.view addSubview:finalView];
Tudo parece funcionar como planejado, exceto eu conseguir um espaço em branco estranho na parte superior do meu ponto de vista entre a barra de status e a barra de título UINavigationController. alt texto http://www.andrewskinner.name/problem.png
Eu procurei online, mas realmente não sei o que procurar. Tem mais alguém teve este problema? Você pode me apontar na direção de alguma ajuda?
Agradecemos antecipadamente.
Solução
Confira as respostas nesta questão:
Não sei por que UIView está sendo cutucou -se em cerca de 10px
Outras dicas
O que faz a linha
UIView *finalView = myeNavigationViewController.view;
adicionar ao código? redundante É como você pode adicionar a vista diretamente sem atribuí-la a um UIView primeiro - além disso, é incorreto como ele faz referência a myNavigationController e não navigationController ..
I tendem a fazer isso
myViewController *viewController = [[myViewController alloc] initWithNibName:@"myView" bundle:nil];
myNavigationViewController *navigationController = [[myNavigationViewController alloc] initWithRootViewController:viewController];
[navigationController.view setFrame: [self.view bounds]];
navigationController.delegate = self;
[self.view addSubview:[navigationController view]];
Definir o enquadramento aos limites também remove o espaço em branco no topo você estava perguntando.
O problema é que UINavigationController idealmente deve ser o subexibição direta de UIWindow. Ele irá posicionar e direita tamanho por si só. Quando você adiciona UINavigationController em outra exibição personalizada de uma subexibição UIWindow, você precisa cuidar da posição e tamanho desta exibição personalizada, levando em conta se a barra de status é mostrado ou não no UIWindow.
A minha sugestão é fazer com que a exibição personalizada como uma subclasse de UINavigationController:
mySubClass_NavigationController*nav=[[mySubClass_NavigationController alloc] initWithRootViewController:viewController ];
[myUIWindow addSubview:nav.view];
e no interior do mySubClass_NavigationController, você pode fazer toda a personalização que você está fazendo agora em seu self (o que quer que o controlador é).
Lutei com isso por um tempo demasiado usando o código muito semelhante ao op e também tinha uma barra branca acima do meu controlador de navegação.
O meu problema ocorreu ao adicionar o UINavigationController como uma visão em um UITabController. O espaço no meu caso foi causado por parte UINavigationBar do UINavigationController tendo em conta a barra de status e foi realmente sobreposição parte da visão que eu estava tentando mostrar na UINavigationController.
Este é o código que acabou com a loadView em um dos meus controladores de vista UITabBarController.
SomeUITableViewController *screenList = [[SomeUITableViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc]
initWithRootViewController:screenList];
CGRect frame = [[navController navigationBar] frame];
frame.origin.y = 0; // Was 20, set to 0 to not take into account the status bar.
[[navController navigationBar] setFrame:frame];
[self setView:[navController view]];
Há mais algumas informações em http://discussions.apple.com/message.jspa ? messageId = 7890362 .
Não é uma propriedade obscura em IB chamado de "Esconde inferior Bar em Push". Basta verificar isso. Ele resolveu o problema para mim.
Talvez você tenha de alguma forma se a si mesmo duas UIViews, cada um com uma barra de estado. Verifique o xib.