Problemas UITabBarController personalizada com Vista Controladores e Visões
-
07-07-2019 - |
Pergunta
Eu estou escrevendo um UITabBarController personalizado para que eu possa controlar totalmente a aparência da barra de guias. Eu tenho tudo isso de trabalho, por isso tenho um conjunto de controladores de vista que ele lida.
O controlador tem uma vista principal, que preenche a tela, e dentro dele tem um UIView na parte inferior para a barra de abas. Esse ponto de vista barra de guia tem um botão para cada controlador de vista. Quando os botões são pressionados eu adicionar a visão do controlador de vista à vista principal, e defini-lo do quadro, de modo que ele não cobre o ponto de vista barra de abas:
controller.view.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height - kTabBarHeight);
Isso tudo funciona muito bem, e eu posso passar rapidamente entre os controladores de vista muito bem. No entanto, quando eu apresentar um controlador de vista modal, e depois descartá-lo, vista do atual controlador de vista se torna tela cheia e cobertas até meu bar guia! Eu tentei configurar as máscaras redimensionamento automático para não redimensionar, mas é continua acontecendo.
Eu também tentei adicionar o ponto de vista controladores visão de para a parte inferior (abaixo da barra de abas) usando:
[self.view insertSubview:controller.view atIndex:0];
Mas quando eu fizer isso, a barra de abas é ainda visível acima de quaisquer vistas modais! O que é estranho. Eu acho que há algo que eu não estou entendendo, então eu ficaria muito grato se alguém pode explicar o que eu estou sentindo falta!
Obrigado,
Mike
Solução 3
Eu consegui encontrar uma maneira melhor para controlar a aparência da barra de guias, simplesmente inserindo subviews ao topo da barra de guias controladores de tabulação. Ele trabalhou um mimo!
Outras dicas
Tente configurar
controller.view.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height - kTabBarHeight);
no método viewWillAppear do controlador
Tente fazer isto. Eu acho que você quer controladores de vista dinâmicos dentro de controlador de barra de abas.
-(void)applicationDidFinishLaunching:(UIApplication *)application {
// Add the tab bar controller's current view as a subview of the window
tabBarController.delegate=self;
tabBarController=[[UITabBarController alloc] init];
mainDashBoard=[[DashBoard alloc] initWithNibName:@"DashBoard" bundle:nil];
mainSearchView=[[SearchView alloc] initWithNibName:@"SearchView" bundle:nil];
mainMoreView=[[MoreView alloc] initWithNibName:@"MoreView" bundle:nil];
UINavigationController *nvCtr0=[[[UINavigationController alloc] init] autorelease];
UINavigationController *nvCtr1=[[[UINavigationController alloc] initWithRootViewController:mainDashBoard] autorelease];
UINavigationController *nvCtr2=[[[UINavigationController alloc] initWithRootViewController:mainSearchView] autorelease];
UINavigationController *nvCtr3=[[[UINavigationController alloc] initWithRootViewController:mainMoreView] autorelease];
UINavigationController *nvCtr4=[[[UINavigationController alloc] init] autorelease];//[[[UINavigationController alloc] initWithRootViewController:nil] autorelease];
tabBarController.viewControllers=[NSArray arrayWithObjects:nvCtr0,nvCtr1,nvCtr2,nvCtr3,nvCtr4,nil];
nvCtr0.tabBarItem.enabled=NO;
nvCtr4.tabBarItem.enabled=NO;
[window tabBarController.view];
}