2017-07-05 37 views
4

我想通過配置navigationItem.searchController將基於tableHeaderView的搜索欄遷移到iOS 11中新的無縫搜索欄方法。附加的iOS 11樣式的UISearchBar背景圖片

由於我的導航欄使用自定義背景圖像,所以我想知道如何將相同的背景圖像應用於搜索欄。我試過

[navigationBar setBackgroundImage:[UIImage imageNamed:@"NavigationBarPromptBackground"] forBarMetrics:UIBarMetricsDefaultPrompt]; 
[searchBar setBackgroundImage:[UIImage imageNamed:@"NavigationBarBackground"] forBarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault]; 

無濟於事。搜索欄保留標準導航欄背景(應用barTintColor),但不顯示自定義背景圖像。

+0

使用外觀代理? – matt

+0

外觀代理只能自動設置普通屬性,如果普通屬性不能正常工作,則不起作用。 –

+2

這個iOS 11的變化真的是一場噩夢... 即使視圖層次debuger顯示正確的背景圖像,但實際輸出不顯示它... 設置searchController是一回事,但如果定製不可能的,這個新功能沒有用:( – manonthemoon

回答

1

我在我的應用程序中做了一個非常類似的事情,在IOS11上發現它現在已經壞了。這是我的代碼有橫跨搜索和範圍酒吧設置我的形象,做工精細高達IOS10:

[searchBarSearch setBackgroundImage:image]; 
[searchBarSearch setScopeBarBackgroundImage:image]; 

我加入這個到現在的.plist

View controller-based status bar appearance = NO 

我吧修好了因爲我選擇了不同的選項,所以會變得有顏色和變化,就像IOS11之前那樣

希望這可以幫助你!

等離子

+0

感謝,很高興知道,但唉,回到傳統的狀態欄外觀處理不是我的選擇 –

+0

我看不到那個API'setBackgroundImage'。是隻有一個具有多個參數欄指標等這是在iOS 11上打破 – manonthemoon

+0

這並不適用於我 – manonthemoon

3

在我來說,我有一個UISearchBar的觀點,而不是放在UINavigationItem。我設置的透明背景圖像沒有出現在iOS 11中。但是,如果我添加一個高度約束,強制searchBar變小,背景圖像會因爲某種原因而被使用。這真是一個非常奇怪的行爲,它必須是一個錯誤,但它現在正在爲我工​​作。

如果我下面的背景圖像被使用:

[[searchBar.heightAnchor constraintEqualToConstant:44.0] setActive:YES]; 
+0

固定高度時,您不會看到動畫顯示外觀,對嗎? –

+1

約束似乎不影響揭示動畫。但是,當將其放置在導航欄內時,backgroundImage也未被使用。我沒有這樣使用,所以當我發佈時我還沒有測試過它。對不起,認爲這值得一試。 – timeuser