2012-01-07 15 views
7

Sto seguendo l'esempio su come creare una barra delle schede con un pulsante centro come Path, Instagram, ecc da qui: http://idevrecipes.com/2010/12/16/raised-center-tab-bar-button/Nascondi pulsante linguetta centrale bar quando vista set spinto HidesBottomBarWhenPushed

Il problema che ho è che quando una vista viene spinta sulla pila che imposta HidesBottomBarWhenPushed per nascondere la barra delle schede, il pulsante centrale viene comunque visualizzato.

Nei commenti, molte altre persone hanno avuto questo problema, ma non c'è una soluzione funzionante. (Ho provato tutte le soluzioni suggerite nei commenti)

Mi è venuta una soluzione hacky: memorizza un riferimento al pulsante centrale in una classe singleton non correlata, quindi la vista spaziata nasconde il pulsante quando è caricato e lo mostra quando scompare, ma questo sembra sbagliato e sembra divertente perché è possibile vedere il pulsante scomparire prima che inizi l'animazione della vista push.

Qualcuno ha funzionato?

+0

Sto cercando una soluzione allo stesso, ho provato [self.tabBar addSubView: pulsante]; ma non funziona – carbonr

+0

spero che questo possa aiutare http://stackoverflow.com/questions/11225696/how-to-hide-custom-tab-bar-button-when-hidesbottombarwhenpushed-is-true?rq=1 – vamsi575kg

risposta

6

Ho avuto lo stesso problema. Ho modificato BaseViewController.m (la mia sottoclasse UITabBarController) sovrascrivendo il seguente metodo viewDidLayoutSubviews (pulsante è il mio pulsante centrale) come seguito.

- (void)viewDidLayoutSubviews{ 
    button.center = self.tabBar.center; 
} 

Ora il tuo pulsante segue la barra delle linguette.

+0

Ricorda per includere 'button.layer.zPosition = 1;' allo stesso modo, per evitare che il pulsante venga coperto dalla barra delle linguette – Lunayo

2

quello che dovete fare lo stesso, ma con UIImageView e aggiungerlo alla barra delle linguette:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:    (UIViewController *)viewController 
{ 
    if (tabBarController.selectedIndex != AUCenterTabBarButtonIntex) { 
     self.centerImageView.highlighted = NO; 
    } else { 
     self.centerImageView.highlighted = YES; 
     self.selectedIndex = AUCenterTabBarButtonIntex; 
    } 

} 


- (void)addCenterImageViewWithImage:(UIImage *)image highlitedImage:(UIImage *)highlitedImage 
{ 
    UIImageView *centerImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, image.size.width/2, image.size.height/2)]; 
    centerImageView.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleTopMargin; 

    centerImageView.image = image; 
    centerImageView.highlightedImage = highlitedImage; 

    CGFloat heightDifference = centerImageView.frame.size.height - self.tabBar.frame.size.height; 
    if (heightDifference < 0) 
     centerImageView.center = CGPointMake(self.tabBar.center.x, centerImageView.center.y); 
    else 
    { 
     CGPoint center = self.tabBar.center; 
     center.y = (self.tabBar.frame.size.height/2) - (heightDifference/2); 
     centerImageView.center = center; 
    } 

    [self.tabBar addSubview:centerImageView]; 

    self.centerImageView = centerImageView; 
} 
1

Prima spinta UIViewController, aggiungere il pulsante personalizzato per UITabBar

Dopo pop UIViewController, pulsante personalizzato di ripristino di auto. vista

sottoclasse UITabViewController

NSArray *array= self.viewControllers; 
for(UIViewController *controller in array){ 
if([controller isKindOfClass:[UINavigationController class]]){ 
    UINavigationController *navigationController=(UINavigationController*)controller; 
    navigationController.delegate=self; 
    } 
} 

Implement delegate method

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated { 
if (viewController.hidesBottomBarWhenPushed) { 
    CGRect rect= [button convertRect:button.bounds toView:self.tabBar]; 
    [button removeFromSuperview]; 
    [self.tabBar addSubview:button]; 
    button.frame=rect; 
} 
} 
-(void)navigationController:(nonnull UINavigationController *)navigationController didShowViewController:(nonnull UIViewController *)viewController animated:(BOOL)animated{ 
if(!viewController.hidesBottomBarWhenPushed){ 
    CGRect rect= [button convertRect:button.bounds toView:self.view]; 
    [button removeFromSuperview]; 
    [self.view addSubview:button]; 
    button.frame=rect; 
} 
} 
Problemi correlati