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.

Foi útil?

Solução

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top