2012-11-29 114 views
4

如果仔細查看UISearchBar的底部UISearchDisplayController,您會注意到它具有潛在的陰影效果。這個陰影不適合我目前正在使用的應用程序的設計,所以我試圖刪除/隱藏它。不幸的是我還沒有成功。UISearchDisplayController隱藏下拉陰影

在我研究這個陰影的過程中,我發現它的不是的一部分UISearchBar。當我從- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller的超級視角中刪除UISearchDisplayControllerUISearchBar時,陰影仍然可見。

陰影原來是UISearchDisplayController'ssearchResultsTableView的一部分:當我隱藏searchResultsTableView時,陰影消失。但是,我一直無法找到在其層上有陰影的視圖。我嘗試遞歸遍歷所有可見視圖(從[[UIApplication sharedApplication]窗口])開始,然後隱藏每個視圖的投影並將它的clipsToBounds屬性設置爲YES,這也不會產生所需的結果。

任何想法?

回答

3

我終於找到了解決辦法。由於將clipsToBounds設置爲YES,並且隱藏層次結構中每個視圖的投影都不起作用,所以顯然陰影是圖像。在遍歷searchResultsTableView的所有子視圖並打印它們的類屬性後,我發現了一個_UISearchBarShadowView的實例,顯然它是罪魁禍首。所以我現在在做的是找到_UISearchBarShadowView並將它的alpha設置爲0.0f。

- (void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView 
{ 
    [self _findAndHideSearchBarShadowInView:tableView]; 
} 

- (void)_findAndHideSearchBarShadowInView:(UIView *)view 
{ 
    NSString *usc = @"_"; 
    NSString *sb = @"UISearchBar"; 
    NSString *sv = @"ShadowView"; 
    NSString *s = [[usc stringByAppendingString:sb] stringByAppendingString:sv]; 

    for (UIView *v in view.subviews) 
    { 
     if ([v isKindOfClass:NSClassFromString(s)]) { 
      v.alpha = 0.0f; 
     } 
     [self _findAndHideSearchBarShadowInView:v]; 
    } 
} 
+0

+1 ...謝謝您的研究!它工作完美! – Lindemann

1

接受的答案使用私有API,這可能會導致您的應用程序被拒絕。相反,我只是找到並隱藏任何子視圖,也是UIImageView的自定義子類,如下所示:

- (void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView 
{ 
    for (UIView *view in tableView.subviews) { 
     if ([view.class isSubclassOfClass:[UIImageView class]]) { 
      view.alpha = 0.f; 
     } 
    } 
} 
+0

短而清晰。正是我需要的。 – filou

+0

這比使用私有API的答案更危險,因爲Apple可能會更改UITableView視圖層次結構並添加另一個UIImageView子類,然後該子類將被此方法隱藏。此外,由於罪魁禍首的類名是在運行時動態組合的,所以Apple不太可能檢測到私有API的使用情況(請參閱:http://stackoverflow.com/a/13387866/21698)。 – datwelk

+0

滾動條是UIImageViews,'isSubclassOfClass'對它們返回YES。此外,你可能有自定義表頭/頁腳視圖,這也是UIImageViews(或派生自他們)。我添加了一個額外的檢查框架的起源是(0,0),以避免誤報。 –