2015-08-25 96 views
0

我添加了一個UINavigationControllerUIViewController編程像以下:如何從導航欄中刪除陰影線?

UINavigationController * nc = [[UINavigationController alloc] initWithRootViewController:[ViewController fromStoryboardNamed:@"myVC"]]; 

,並在調試視圖層次我看到有一個叫UIBackdropViewUINavigationBar與灰色的背景後面視圖。你可以看到,在截圖:

enter image description here

我試圖找到它的文檔,但我找不到任何。

我們可以訪問此圖層嗎?

這會導致1像素的灰線出現在UINavigationBar下。是否可以刪除/隱藏_UIBackDropView

我試圖通過添加一個簡單的UIViewUINavigationBar覆蓋這條黑暗線下的白色背景色混合這1像素線,它運行良好。我想知道如果有一種方法可以隱藏/刪除BackdropView而不是在其上添加UIView

回答

4

正式的,這隻能通過將navigationBar的shadowImage設置爲空圖像來實現,正如另一個答案中提到的那樣。但是,仔細查看說明文件,則說:

對於要顯示的自定義陰影圖像,還必須使用setBackgroundImage:forBarMetrics:方法設置自定義背景圖像。如果使用默認背景圖像,則將使用默認陰影圖像,而不管此屬性的值如何。

通過使用自定義背景圖像,您將失去模糊的背景半透明,這可能不是你想要的。

「髮際線」是UIImageView,它是導航欄的子視圖。你可以找到它並將它設置爲隱藏。例如,蘋果在其本機日曆應用程序中就是這樣做的。只需迭代子視圖,並將圖像視圖設置爲隱藏。

0

這是Apple私人API。您可以嘗試使用超級視圖訪問它,或使用valueForKey。但是,我不會推薦使用它。首先,蘋果可能會拒絕你的申請。此外,所有Apple構建視圖的結構可能隨時發生變化,您的應用程序可能會遇到問題。有關_UIBackdropView的更多信息,您可以找到here

最簡單快捷的解決方案,除去一個像素強調的是這一個:

[[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault]; 
[[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]]; 

但是它會刪除模糊,什麼是可能不是你想要的。您可以使用UINavigationBar-Addition輕鬆刪除髮際線,而不會影響模糊效果。

+0

其實我想刪除視圖只是因爲它添加了導航欄下的1像素線 –

+0

您可以看到如何隱藏它,它是我的答案的一部分,並且還添加了引用到一個stackoverflow線程,其中此問題是已經問過。 – gontovnik

+0

@ T_77陰影圖像是一個不同的視圖。 –