2012-12-03 136 views
0

我有一個視圖控制器嵌入在導航控制器。因此,此視圖控制器的頂部有一個導航項目。你可以在ios6故事板上做的事情之一是你可以設置這個視圖控制器的標題,提示和返回按鈕(因爲它嵌入在導航控制器中)。UIView導航項目頂部

這就是說,當我指定一個標題和測試應用程序,一切看起來不錯。但是,當我將一個透明的UIView放置在導航條目的頂部(例如標題所在的位置)時,標題本身就消失了。我在界面生成器中輸入的文本已經消失。我已經證明了這一點,因爲如果我刪除了我創建的視圖,我最初擁有的文本已經消失。

我試圖通過實際設置標題本身的界面生成器以外的調解問題:

[email protected]"My Title"; 

但是,好好嘗試一下似乎擦出火花。有沒有人有一個線索,我可以隱藏/顯示導航控制器中的navigationItem頂部的透明UIView?

編輯

我的導航控制器工具欄上放置任何UI元素似乎以防止潛在的標題文本從顯示出來。即使元素被標記爲透明並且其設置爲隱藏,也會發生這種情況。

+0

兩個答案都是正確的,但馬修提供了更多的細節。 – AbuZubair

回答

1

我的理解是,Interface Builder或多或少地模仿如果使用UIBarButtonItem類以編程方式做同樣的事情時你會做什麼。導航欄中的各個項目是UIBarButtonItem類的實例。這個類有以下初始化:

– initWithBarButtonSystemItem:target:action: 
– initWithCustomView: 
– initWithImage:style:target:action: 
– initWithTitle:style:target:action: 
– initWithImage:landscapeImagePhone:style:target:action: 

當你只是有導航控制器標題,Interface Builder的對待它類似於使用initWithTitle:初始化。基本上,這意味着,在引擎蓋下,使用給定的標題創建UILabel類,並且將UILabel用作UIBarButtonItem的視圖。

但是,當您將透明視圖拖到標題上時,Interface Builder相當於調用initWithCustomView:。這意味着你正在提供的視圖被用作UIBarButtonItem的視圖。換句話說,當您將自定義視圖拖到標題上時,您不會將其放置在標題之上。你用替換了標題的透明視圖。

一個選項可能是創建一個既有UILabel又有透明視圖作爲子視圖的視圖。然後將該視圖作爲導航欄的標題。如果您給UILabel使用正確的字體大小和陰影,它將與系統的默認標題看起來難以區分,並且您還可以在其上方顯示透明視圖。

+0

是的,我能得到這個職位的默認字體/大小設置:http://stackoverflow.com/questions/599405/iphone-navigation-bar-title-text-color/13694535#13694535 – AbuZubair

+0

我有一個問題雖然。我需要一個進度條,在進度標籤和導航控制器標題都在一個擠滿小區域。在一個視圖中有三個UI元素真的有意義嗎?它在界面構建器中變得如此擁擠。 – AbuZubair

+0

沒有什麼根本上的錯誤,通過具有在單一視圖中有三個UI元素。你是對的,你將需要小心如何佈置它,以便它仍然看起來很好的用戶。 –

0

在IB中,您可以將UIView拖動到導航欄的中心,這將替換默認情況下存在的titleView(您可以在setTitleView的代碼中使用它)。如果您清楚地瞭解其背景併爲其添加標籤以保留標題,則它將看起來像默認標題。然後,您可以添加另一個UIView作爲此視圖的子視圖,就像您使用其他UIView一樣。

+0

所以你說我必須添加一個標籤,其文字大小和字體與原來的標題相同?我沒有辦法通過透明的覆蓋視圖讓底層標題暴露自己? – AbuZubair

+0

是的,你必須加入自己的觀點 - 它可能只是標籤本身,或者UIView的任何其他子類。看看爲titleview的屬性參考,它解釋說,如果你設置一個,它採用標準的標題的地方。 – rdelmar