[英]UITabBarController with UINavigationController, hide UINavigationController toolbar on hidesBottomBarWhenPushed, not UITabBarController tab bar
我有一個帶有三個視圖控制器的UITabBarController
根視圖控制器,其中一個是帶有UIViewController
的UINavigationController
,其中包含UISearchDisplayController
和UITableView
。 沒有隱藏UINavigationController
工具欄。
但是,當我在UITableView
選擇一行時,我想推送另一個UIViewController
。 按下此UIViewController
, UINavigationController
工具欄應滑出, UITabBarController
選項卡欄應保持可見。
我嘗試將推送的UIViewController
的hidesBottomBarWhenPushed屬性設置為true(當UINavigationController
未嵌套在UITabBarController
時,它提供了預期的行為)。 不幸的是,當將hidesBottomBarWhenPushed設置為true時,將UINavigationController
工具欄滑出,而是將UITabBarController
滑出,使UINavigationController
在被推入的UIViewController
作為底部欄可見。
按下時如何滑出UINavigationController
工具欄,而不是UITabBarController
選項卡欄?
編輯#1 :我能想到的唯一可能的解決方案是,只需將UIToolbar
添加到包含UITableView
的UIViewController
視圖的底部,而不是使用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.