如何自定义UISearchBar样式

时间:2011-02-21 03:54:53

标签: iphone uisearchbar

有谁知道如何自定义UISearchBar样式? UISearchBar有3种默认样式,但我想自定义搜索栏的其他方面,例如图像,背景。如果无法做到这一点,我可以使用UITextField替换搜索栏的功能吗?

全部谢谢

3 个答案:

答案 0 :(得分:6)

正如您所发现的,您可以使用barStyle属性和以下两个值自定义条形图,例如搜索栏:

UIBarStyleDefault
UIBarStyleBlack

或者,您可以使用tintColor属性为栏选择自定义颜色:

// use RGB values between 0.0 and 1.0
UIColor *barColor = [UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:1.0]; 
searchBar.tintColor = barColor;

在任何一种情况下,您都可以通过将半透明属性设置为YES来使条形图保持半透明。

答案 1 :(得分:1)

UISearchBar是UIView的子类,因此您只需在顶部添加UIView即可。 (您只需要保持实际搜索栏的区域透明。)

//编辑

如果将图像添加到背景(背景和搜索字段之间),则更容易。要做到这一点,只需添加它并迭代子视图,将原始背景发送到背面(图像视图后面)。

searchBarOverlay = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"SearchBarBack"]];
searchBarOverlay.frame = CGRectMake(-8, -2, 320, 48);
[searchBar addSubview:searchBarOverlay];
[searchBar sendSubviewToBack:searchBarOverlay];

for (UIView *v in [searchBar subviews]) {

    if ([NSStringFromClass([v class]) isEqualToString:@"UISearchBarBackground"]) 
    {
        [searchBar sendSubviewToBack:v];
    }

    if ([NSStringFromClass([v class]) isEqualToString:@"UIImageView"] && v != searchBarOverlay) 
    {
        [searchBar sendSubviewToBack:v];
    }
}

答案 2 :(得分:0)

对于UISearchBarStyleProminent:

1)务必检查“属性”检查器中搜索栏的“半透明”框。

2)将以下内容添加到viewDidLoad:

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

为了让最小的搜索栏不是半透明的,我已经整理了一个解决方法。

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.