簡體   English   中英

具有UINavigationController的UITabBarController,在hidesBottomBarWhenPushed而不是UITabBarController選項卡欄上隱藏UINavigationController工具欄

[英]UITabBarController with UINavigationController, hide UINavigationController toolbar on hidesBottomBarWhenPushed, not UITabBarController tab bar

我有一個帶有三個視圖控制器的UITabBarController根視圖控制器,其中一個是帶有UIViewControllerUINavigationController ,其中包含UISearchDisplayControllerUITableView 沒有隱藏UINavigationController工具欄。

但是,當我在UITableView選擇一行時,我想推送另一個UIViewController 按下此UIViewControllerUINavigationController工具欄應滑出, UITabBarController選項卡欄應保持可見。

我嘗試將推送的UIViewController的hidesBottomBarWhenPushed屬性設置為true(當UINavigationController未嵌套在UITabBarController時,它提供了預期的行為)。 不幸的是,當將hidesBottomBarWhenPushed設置為true時,將UINavigationController工具欄滑出,而是將UITabBarController滑出,使UINavigationController在被推入的UIViewController作為底部欄可見。

按下時如何滑出UINavigationController工具欄,而不是UITabBarController選項卡欄?

編輯#1 :我能想到的唯一可能的解決方案是,只需將UIToolbar添加到包含UITableViewUIViewController視圖的底部,而不是使用UINavigationController工具欄。 這將確保該UIToolbar滑出當新UIViewController當新的推和幻燈片UIViewController被彈出。 唯一的問題是,對於iPhone和iPod Touch,與UINavigationController工具欄不同,將設備旋轉到其中時, UIToolbar實例的高度(44像素)不會縮小到30+像素(就像UINavigationController工具欄一樣)。橫向。 如果這是唯一合法的解決方案,我如何更改UIToolbar的高度以匹配橫向中UINavigationController工具欄的高度?

編輯#2 :關於編輯#1,我想可以在willRotateToInterfaceOrientation方法中更改UIToolbar的框架。 不過,我仍然希望找到一個滑出UINavigationController工具欄的解決方案。 比為每個UIViewController創建一個單獨的UIToolbar更好,我希望有一個底部工具欄。

編輯#3 :基本上,這就是我所擁有的(這是hidesBottomBarWhenPushed的結果): http ://flic.kr/p/bcjydn

而且,這是我想要實現的目標: http : //flic.kr/p/bcjybK

編輯#4 :首先,謝謝你的時間。 其次,不幸的是,UINavigationController中的setToolbarHidden:animated:方法無法生成動畫中的滑出/滑出,如用setHidesBottomBarWhenPushed:看到的那樣(有關所需動畫,請參閱EDIT#3中的鏈接,特別是第二個鏈接)。 例如,假設我們寫:

- (void)viewWillAppear:(BOOL)animated
{
    [self.navigationController setToolbarHidden:NO animated:NO];
    [super viewWillAppear:animated];
}

在父視圖控制器(未隱藏工具欄的視圖控制器)中,並假設我們寫:

- (void)viewWillAppear:(BOOL)animated
{
    [self.navigationController setToolbarHidden:YES animated:NO];
    [super viewWillAppear:animated];
}

在子視圖控制器(隱藏工具欄的視圖控制器)中。

只要我們從子視圖控制器將子視圖控制器推送到UINavigationController堆棧,就會調用子視圖控制器viewWillAppear:方法。 這將簡單地隱藏UINavigationController工具欄(在推動動畫開始之前),暴露位於UINavigationController工具欄下方的UIWindow部分。 推送動畫的其余部分將按預期執行(UINavigationController工具欄在子視圖控制器中仍然不可見,所有大小均已適當調整)。 然后,當我們彈出子視圖控制器時,將為parentViewController調用viewWillAppear:方法,該方法將取消隱藏UINavigationController工具欄(使工具欄在子視圖控制器中可見),然后將執行pop動畫。 彈出動畫的其余部分將按預期執行(UINavigationController工具欄在父視圖控制器中仍然可見,所有大小都會適當調整)。

有點想到這個問題會導致一個rathole。 我唯一剩下的想法是:

1) 編輯#1 (盡管該實現受限於無法適當或合法地改變標准UIToolbar實例的高度,iPod Touch或iPhone處於橫向狀態;這是我對使用UINavigationController工具欄的原因之一。)

2)子類UITabBar或UITabBarController嘗試阻止setHidesBottomBarWhenPushed:方法實現UITabBarController標簽欄是底欄。 基本上,繞過選項卡欄並改為傳遞UINavigationController工具欄。 可能是最有前途的想法,但可能是最困難的(因為setHidesBottomBarWhenPushed的知識:內臟是有限的,因為可能需要私有API)。

當你按下導航欄控制器時寫下代碼

YourController = [[YourController alloc] initWithNibName:@"YourController" bundle:nil]
controller.hidesBottomBarWhenPushed = TRUE;
[self.navigatoinController pushViewController:controller Animated:YES];

//// Try this code where you want to hide navigation bar

-(void)viewWillAppear{
    self.navigationController.navigationBarHidden = TRUE;
}

在你的UIViewController方法中, viewWillAppear進行以下調用

[self.navigationController setToolbarHidden:YES animated:NO];

該欄屬於UINavigationController。 雖然我從來沒有使用過hidesBottomBarWhenPushed它看起來像是它可以找到的最底部的酒吧。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM