2012-01-07 11 views
7

HidesBottomBarWhenPushed: http://idevrecipes.com/2010/12/16/raised-center-tab-bar-button/gizle orta sekme çubuğu düğmesi itilir görünüm setleri buradan vb Path gibi bir merkez düğme, Instagram, bir sekme çubuğu oluşturmak için nasıl örnek takip ediyorum

Ben sorun olduğunu HidesBottomBarWhenPushed öğesini sekme çubuğunu gizlemek için ayarlayan yığına bir görünüm basıldığında, orta düğme hala görüntülenir.

Yorumlarda, diğer birçok insan bu problemi yaşamış, ancak çalışan bir çözüm bulunmamaktadır. (Yorumlarda önerilen tüm çözümleri denedim)

Hacky bir çözüm buldum - ilgisiz bir singleton sınıfında orta düğmeye bir başvuru depolayın ve daha sonra itilmiş görünüm düğmeyi gizlediğinde yüklendi ve kaybolduğunda gösterilsin - ama bu sadece yanlış geliyor ve komik görünüyor çünkü itme görünümü animasyonu başlamadan önce düğmenin kaybolduğunu görebiliyorsunuz.

Bunu yapan var mı?

+0

Aynı çözüm için bir çözüm arıyorum [self.tabBar addSubView: button]; ama bu işe yaramıyor – carbonr

+0

bu yardımcı olabilir http://stackoverflow.com/questions/11225696/how-to-hide-custom-tab-bar-button-when-hidesbottombarwhenpushed-is-true?rq=1 – vamsi575kg

cevap

6

Aynı problem vardı. BaseViewController.m (UITabBarController alt sınıfım) aşağıdaki viewDidLayoutSubviews yöntemini (düğme benim ortadaki düğmedir) izlediği şekilde düzenledim.

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

Şimdi düğmeniz, sekmeyi izler.

+0

hatırla düğmenin örtücü tarafından kaplanmasını önlemek için 'button.layer.zPosition = 1; – Lunayo

2

Sen tabBar bunu aynı ama UIImageView yapmak ve eklemek zorunda:

- (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

itme UIViewController bulunmadan önce, özel düğme pop UIViewController sonra

UITabBar eklemek kendine özel bir düğme geri yükleyin. görünüm

Alt sınıf UITabViewController

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

Temsilci yöntemini gerçekleştirme

- (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; 
} 
} 
İlgili konular