web-dev-qa-db-ja.com

uinavigationControllerでコントローラーを押すときに親タブバーを非表示にする方法

タブバーコントローラーを備えたアプリケーションがあり、各ビューにはナビゲーションコントローラーが含まれています。私のメインウィンドウは次のようになります: 画像はこちらhttp://www.freeimagehosting.net/image.php?7bc867a594.png

そのままでも問題なく動作しますが、詳細ビューをナビゲーションコントローラーにプッシュすると問題が発生します。タブバーコントローラー(画像ではLatestと呼ばれるもの)に属するtableviewcontrollerのdidSelectRowAtIndexPathで、これを実行しています。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    ArticleViewController *articleController = [[ArticleViewController alloc] initWithNibName:@"ArticleView" bundle:nil];

    [self.navigationController pushViewController:articleController animated:YES];

    [articleController release];
    articleController = nil;
}

ArticleViewControllerには、さまざまなものを表示する必要があるため、独自のタブバーがあります。問題は、ArticleViewControllerをnavigationControllerにプッシュすると、ビューの下部に両方のタブバーが表示されることです。この問題を解決する方法はありますか?

前もって感謝します

26
Yannis

何時間もかけてここに質問を投稿した後、この問題の解決策は、ArticleControllerのインスタンス化後に次の行を追加することであることがわかりました。

articleController.hidesBottomBarWhenPushed = YES;
83
Yannis

コーディングよりもストーリーボード構成を好む場合は、そのための切り替えがあります。 destinationViewController> Attribute Inspectorに移動するだけです:

enter image description here

26
Viktor Kucera

非常に簡単な解決策:

 destinationViewController.hidesBottomBarWhenPushed = YES;

あなたの場合:

 articleController.hidesBottomBarWhenPushed = YES;

お役に立てれば!

11
Mrinal Mandal

ストーリーボードから親タブバーを簡単に非表示にできます。

Select viewcontroller> Attribute Inspector>checkHide Bottom Bar on Push ==

3
Deep

プッシュしているViewControllerに以下のコードを追加できます。

-(BOOL)hidesBottomBarWhenPushed
{ 
     return YES;
}

これにより、プッシュされたView Controllerでのみタブバーが非表示になり、View Controllerをポップしても、残りのすべてのViewControllerでタブバーが再表示されたままになります。

Swiftバージョン(3.x以降)

override var hidesBottomBarWhenPushed: Bool {
    get {
        return navigationController?.topViewController == self
    }
    set {
        super.hidesBottomBarWhenPushed = newValue
    }
}

ありがとう

1
Teena nath Paul

ここに画像の説明を入力してください

Xcodeのインターフェイスビルダーに移動し、属性インスペクターを開き、タブバーを表示したくないビューコントローラーの項目「プッシュ時に下部バーを非表示」をチェックします。それが動作します!!

1
Nits007ak

非表示にするコントローラーでプロパティhidesBottomBarWhenPushedを使用します。

非表示の場合、すべてのコントローラーはprepare for segueに配置されます

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    segue.destination.hidesBottomBarWhenPushed = true
}
1
Haroldo Gondim

for Swift 3、以下のようにpushviewControllerコードの前にタブバーを再表示して同じコードを記述します

   var frame = self.tabBarController?.tabBar.frame
    frame?.Origin.y = self.view.frame.size.height - (frame?.size.height)!+112
    UIView.animate(withDuration: 0.2, animations: {
        self.tabBarController?.tabBar.frame = frame!
    })
    self.navigationController?.pushViewController(viewController, animated: true)

または、uが使用できるタブバーを再表示するために必要なものを使用します

  viewController.hidesBottomBarWhenPushed = false
1
user8043247