2009-06-04 51 views
18

我已經遇到過這兩次了。呈現模態視圖偶爾隱藏導航欄

有時使用下面的代碼行:

[self.navigationController presentModalViewController:aViewController animated:YES]; 

顯示視圖,但然後隱藏導航欄。

我可以這樣寫:

[self.navigationController setNavigationBarHidden:NO]; 

我的心的內容,無論我能想到的,沒有效果。

有沒有人遇到過這個?

我在做些傻事嗎?

回答

38

不,我也碰到過這個。問題在於,當您使用基於UIViewController的類呈現模態視圖控制器時,它不會將調用導航控制器的導航欄擴展到模態上。模態視圖覆蓋整個屏幕。我最終做的解決問題的方法是創建一個UINavigationController並將基於UIViewController的類推到它上面,然後將presentModalViewController放到導航控制器的實例中。

喜歡:

UIViewController *vc = [[UIViewController alloc] init]; 
UINavigationController *cntrol = [[UINavigationController alloc] initWithRootViewController:vc]; 
[self presentModalViewController:cntrol animated:YES]; 
[cntrol release]; 

,讓我有在頂部的導航欄。

我不確定這是否會對您的特定情況有所幫助,我建議的唯一的另一件事是用UIAnimation複製模式的行爲,該UIAnimation停止在手機頂部以下44px。這將保持原始導航欄可見。

+1

哦,我很愚蠢。我不需要頂部的導航控制器,只需一個工具欄,任何工具欄。謝謝 – 2009-06-04 01:05:49

+0

順便說一句,謝謝你在過去5個小時裏把那首歌放在腦海裏。我覺得這是聖誕節。 – 2009-06-04 06:01:39

1

也許這是顯而易見的,但一旦你與模態視圖做,想關閉它,你應該做這樣的事情在你的模式VC:

[parentController dismissModalViewControllerAnimated:YES];

其中parentController是從您展示模態視圖的vc的引用。

2

@HeatMiser顯示了一個很好的方式來解決無法在導航欄上顯示項目的「bug」。不過,我不確定這是否嚴格是Presentation中的一個bug,因爲模態操作應該勝過底層視圖的界面主題。模態操作的主題模仿底層UI主題是好的,但用導航視圖包裝真正的模態視圖對我來說是錯誤的(額外的視圖對象只是爲了獲得更多的行爲)。

取而代之,以下代碼適用於我,並且在郵件程序(在iPhone上)中提供與「新郵件」相同的行爲。

在IB中,通過「取消」和「保存」UIBarButtonItem和一個靈活的空格鍵按鈕項之間放置一個UIToolBar在模態屏幕的頂部(模仿導航欄),讓按鈕左右對齊。然後,添加一個以UIToolBar爲中心的UILabel(字體Helvetica,粗體,大小18似乎與導航欄標題相匹配)。將按鈕連接到模式的UIViewController上的IBAction,就完成了。

1

如果有一個導航控制器活動,那麼你應該只使用

[self.navigationController pushViewControllerAnimated:如何]

滑動另一個視圖控制器,同時讓自己和用戶進入一個一致的用戶界面,並帶有「自動」後退按鈕支持。

一旦使用導航控制器,應該只顯示一個模態視圖控制器來放大屏幕上的可用區域。然後,你應該真的使用一個奇特的動畫讓用戶知道你正在離開導航控制器所體現的「任務」或「步驟」。