2013-09-25 51 views
4

我們有一個UITableViewsearchbarsearchDisplayController一起添加。在UISearchBar上設置半透明爲NO

我們希望在整個應用程序中擁有半透明性。

我使用導航欄和其他欄的半透明性,但使用顯示控制器時沒有搜索欄。在我們使用搜索欄而不是顯示控制器的應用程序的一部分中,半透明設置正確。

如何將顯示控制器的UISearchBar的半透明屬性設置爲NO?

編輯: 這是我的代碼在viewDidLoad

self.navigationController.navigationBar.translucent = NO; 
BOOL t = self.searchDisplayController.searchBar.translucent; 
self.searchDisplayController.searchBar.translucent = NO; 
self.navigationController.navigationBar.barTintColor = [UIColor redColor]; 
self.searchDisplayController.searchBar.barTintColor = [UIColor redColor]; 
UIBarStyle b1 = self.searchDisplayController.searchBar.barStyle; 
UISearchBarStyle b2 = self.searchDisplayController.searchBar.searchBarStyle; 
BOOL t2 = self.searchDisplayController.searchBar.translucent; 

在調試器,T = YES和t2運行= YES。 b1 = UIBarStyleDefault和b2 = UISearchBarStyleDefault。我是否在錯誤的地點設置了NO?香港專業教育學院試圖在storyboard這裏設置在viewDidLoad

回答

6

對於UISearchBarStyleProminent:

1)一定要選中「半透明」框在屬性檢查器中的搜索欄。

2)以下內容添加到viewDidLoad中:

self.navigationController.navigationBar.translucent = NO; // If you have a navBar 
self.searchDisplayController.searchBar.translucent = NO; 

編輯@RudolfAdamkovic

「我發現,對於UISearchBarStyleProminent,執行[以下]幫助這樣。你可以在Storyboard中保留它。「
searchBar.translucent = YES;
searchBar.translucent = NO;

對於UISearchBarStyleMinimal:

爲了獲得最小的搜索欄不被半透明我已經把一種解決方法。

1)一定要檢查屬性檢查器中搜索欄的「半透明」框。

2)將以下代碼添加到viewDidLoad中:

self.navigationController.navigationBar.translucent = NO; 
self.searchDisplayController.searchBar.translucent = NO; 
self.searchDisplayController.searchBar.backgroundColor = [UIColor desiredColor]; 

3)一個UIView需要被添加到ViewController。此視圖需要20px高度,並且應該與searchBar.barTintColor具有相同的顏色。

注:我覺得需要這樣的解決方法,因爲:"The style UISearchBarStyleMinimal provides no default background color or image but will display one if customized as such."因此,只有這樣,才能得到這個功能對於UISearchBarStyleMinimal是設置的backgroundColor。

查看UISearchBar documentation瞭解更多詳情。

+1

這沒有奏效,這就是爲什麼我發佈的問題。我希望我能接受這個答案是正確的。 –

+0

對,對不起。我只注意到這不是完整的答案。我已經更新了答案,並已驗證它適用於我。 –

+0

爲什麼我的半透明變量設置爲YES?設置半透明屬性後設置顏色並沒有什麼不同。我認爲我看到它的半透明性......如果我們將導航設置爲紅色,它下面的搜索欄看起來就會變成粉紅色。 –

1

以上答案都不適用於iOS 7/8。這裏有一些設置代碼伎倆:

searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.frame), 44)]; 
searchBar.scopeButtonTitles = @[@"Scope1", @"Scope2"]; 
searchBar.selectedScopeButtonIndex = 0; 
searchBar.backgroundColor = [UIColor clearColor]; 
searchBar.barTintColor = [UIColor clearColor]; 
searchBar.translucent = YES; // SUPER IMPORTANT, REMOVING THIS MESSED UP THE SCOPE BAR 

// ONLY USE IMAGES, NOT BACKGROUND COLORS 
UIImage *searchBarBackgroundImage = [[UIImage imageNamed:@"SearchBarBackgroundImage"]; 
UIImage *scopeBarBackgroundImage = [[UIImage imageNamed:@"ScopeBarBackgroundImage"]; 
[searchBar setBackgroundImage:searchBarBackgroundImage 
       forBarPosition:UIBarPositionAny 
        barMetrics:UIBarMetricsDefault]; 
searchBar.scopeBarBackgroundImage = scopeBarBackgroundImage; 
searchBar.tintColor = [UIColor whiteColor];