2012-01-07 4 views
7

をHidesBottomBarWhenPushed、Instagramの、:私が持っているhttp://idevrecipes.com/2010/12/16/raised-center-tab-bar-button/隠すセンタータブバーのボタン押しビューセットは、私はパスのような中央のボタンでタブバーを作成する方法についての例を以下のよ

問題があることですタブバーを隠すためにHidesBottomBarWhenPushedを設定するスタックにビューがプッシュされると、中央ボタンは引き続き表示されます。

コメントには、この問題が他にもいくつかありましたが、解決策はありません。 (私はコメントのすべての提案された解決策を試しました)

私はハッキーな解決策を考え出しました - 無関係なシングルトンクラスの中央ボタンへの参照を保存し、プッシュビューでボタンを隠す表示されていない場合は、プッシュビューのアニメーションが開始される前にボタンが消えてしまうのが分かります。

これは誰でもいますか?

+0

私は[self.tabBar addSubView:button]を試してみました。しかし、それは動作しません – carbonr

+0

これが助けることを望むhttp://stackoverflow.com/questions/11225696/how-to-hide-custom-tab-bar-button-when-hidesbottombarwhenpushed-is-true?rq=1 – vamsi575kg

答えて

6

私は同じ問題を抱えていました。 以下のviewDidLayoutSubviewsメソッド(ボタンは私の中央ボタン)をオーバーライドしてBaseViewController.m(私のUITabBarControllerサブクラス)を編集しました。

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

ここで、あなたのボタンはタブバーに従います。

+0

覚えているボタンがタブバーによって覆われないようにするために、 'button.layer.zPosition = 1;'も含めてください – Lunayo

2

あなたはこの同じですが、UIImageViewとを行い、タブバーに追加する必要があります。

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

をプッシュのUIViewControllerは、ポップのUIViewControllerの後UITabBar

にカスタムボタンを追加する前に、自己にカスタムボタンを復元します。ビュー

サブクラスUITabViewController

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

デリゲートメソッドを実装する

- (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; 
} 
} 
関連する問題