2013-09-26 74 views
4

我正在創建一個iOS 7應用程序,我想在導航欄的右下方有一個SearchBar,並且我希望它們看上去像一塊。因此,我需要使用相同的顏色(已完成)對它們着色,然後移除NavigationBar底部和SearchBar頂部的細線。我怎樣才能做到這一點?如何刪除UINavigationBar和UISearchBar細線

+0

http://stackoverflow.com/a/21302744/1463604 – Nishant

回答

13

正式的,這隻能通過將navigationBar的shadowImage設置爲空圖像來實現。但是,仔細查看說明文件,則說:

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

通過使用自定義背景圖像,您將失去模糊的背景半透明。

如果您覺得冒險,「髮際線」是一個UIImageView,它是導航欄的子視圖。你可以找到它並將它設置爲隱藏。例如,蘋果公司在其本機日曆應用程序中執行的操作就是這樣。請記得在當前視圖消失時顯示它。

+0

我要使用背景圖片,但導航欄將是不透明的,所以模糊效果的損失也不會影響我在這案件。 另一個問題是:我怎麼能知道哪個子視圖隱藏,因爲它包含多個UIImageView? – Guilherme

+0

如果您正在使用自定義背景圖片,則不應觸摸視圖層次結構。你可以使用一個空的'shadowImage'。 我想我隱藏了所有的圖像視圖在我的情況。 –

+0

我無法使它工作。我嘗試將shadowImage設置爲一個透明的1x1 png文件,這個文件的顏色與NavigationBar的顏色相同,使用'[UIImage new]',甚至'nil',但它們都不起作用。 – Guilherme

4

刪除UISearchBar頂部和底部的細線的一種方法是用可伸縮的替換背景圖片,該圖片沒有那個薄邊框。只是讓你選擇的顏色,然後PNG形方:

[searchBar setBackgroundImage:[[UIImage imageNamed:@"SearchBarImage"] resizableImageWithCapInsets:UIEdgeInsetsMake(10, 10, 10, 10)]]; 

由於背景是實心的,你可以使用幾乎你想要的任何插圖值。

+0

爲了避免轉換到搜索時出現的外觀錯誤,我將insets設置爲0,0,0,0。它仍然很好,並且我沒有在點擊搜索字段時遇到圖形損壞。 – Joey

6

使用以下中的AppDelegate代碼(didFinishLaunchingWithOptions)

夫特:

UINavigationBar.appearance().setBackgroundImage(UIImage(), forBarPosition: .Any, barMetrics: .Default) 
    UINavigationBar.appearance().shadowImage = UIImage() 

目標C:

[[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] 
            forBarPosition:UIBarPositionAny 
             barMetrics:UIBarMetricsDefault]; 

[[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]]; 
3

夫特3:

self.navigationController?.navigationBar.setValue(true, forKey: "hidesShadow") 
+0

爲什麼我們必須設置一個字符串作爲參數??,這沒有意義,可以更好地設置一個枚舉。 – LeoGalante

+1

搜索並嘗試了很多不同的解決方案。這是唯一一個使用UISearchController的人。 – jfredsilva

+0

Objective-C:[self.navigationController.navigationBar setValue:@(YES)forKeyPath:@「hidesShadow」]; – jfredsilva