1. 程式人生 > >使用UISearchController跳轉新控制器時搜尋框依然出現

使用UISearchController跳轉新控制器時搜尋框依然出現

最近偶遇一個問題,當使用UISearchController來push一個新的介面時,push成功後搜尋框依然存在,不知道是不是蘋果的一個bug,但是可以通過增加一句程式碼來解決:

    self.definesPresentationContext = YES;

那麼這句話什麼意思呢?
definesPresentationContext這是一個布林變數,表示該檢視被覆蓋時,檢視或者它的子類提供了一個檢視控制器。預設為NO,我們在做跳轉時,需要一個跳轉的環境,如果呈現的檢視控制器不提供的話,需要呈現這個控制器的父檢視控制器。此處因為UISearchController為呈現的檢視控制器,它不提供這個跳轉的環境,所以需要它的父檢視控制器提供,所以設定父檢視控制器的這個布林變數為YES。
這裡需要注意個問題:
普通的VC在push時雖然這個屬性預設為NO,但是,是沒有影響的,因為這種情況只發生在有新的檢視控制器覆蓋了當前控制器的情況。

Determines which parent view controller's view should
 be presented over for presentations of type 
view controller has this flag set, then the presente 
will be the root view controller.
翻譯:確定哪一個控制器應該被作為UIModalPresentationCurrentContext型別的演示影象而呈現,如
果沒有父檢視控制器設定了此標誌,則呈現者將是當前控制器的根檢視控
制器。

大意應該是,有檢視控制器覆蓋了根檢視控制器,就手動設定根檢視控制器為呈現的控制器,並作為跳轉的環境。