UISearchBar透明背景视图

jee*_*ham 21 iphone objective-c ipad ios

在UISearchBar中,默认情况下应该显示背景视图.怎么隐藏?我只需要在UISearchBar中搜索textview部分.

Bra*_*don 61

[[searchBar.subviews objectAtIndex:0] removeFromSuperview];
Run Code Online (Sandbox Code Playgroud)

  • 这似乎有效,但有一个奇怪的先决条件,即搜索栏样式设置为"黑色半透明" (10认同)
  • 当与以下行一起使用时,这对我有用:searchBar.backgroundColor = [UIColor clearColor]; (4认同)
  • 它适用于我(iOS 6.1模拟器,Xcode 5.0.2),没有任何黑客,但要小心!在iOS 7中,它会删除searchBar本身,因此您应该在使用此hack之前检查iOS版本. (4认同)
  • 在iOS 6.1,Xcode 4.6.3上对我不起作用. (3认同)

小智 24

这里有一个适用于iOS 5iOS 6的解决方案.我已经检查过没有必要更改任何其他属性(比如将backgroundColor设置为[UIColor clearColor])以使其工作.

for (UIView * v in searchBar.subviews) {
    if ([v isKindOfClass:NSClassFromString(@"UISearchBarTextField")]) {
        v.superview.alpha = 0;
        UIView *containerView = [[UIView alloc] initWithFrame:searchBar.frame];
        [containerView addSubview:v];
        [self.view addSubview:containerView];
    }
}
Run Code Online (Sandbox Code Playgroud)


Cœu*_*œur 18

从iOS 5开始,我建议采用以下方式,这样可以避免弄乱未记录的子视图.更换selfself.searchBar,如果你继承了UISearchBarController,而不是本身的UISearchBar的.

// transparency for UISearchBar
self.translucent = YES;
self.backgroundImage = [UIImage new];
self.scopeBarBackgroundImage = [UIImage new];
Run Code Online (Sandbox Code Playgroud)

作为奖励:

// transparency for UIToolbar
self.translucent = YES;
[self setBackgroundImage:[UIImage new] forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];
[self setShadowImage:[UIImage new] forToolbarPosition:UIToolbarPositionAny];

// transparency for UINavigationBar
self.translucent = YES;
[self setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
self.shadowImage = [UIImage new];

// transparency for UITabBar
self.backgroundImage = [UIImage new];
self.shadowImage = [UIImage new];
Run Code Online (Sandbox Code Playgroud)


Kal*_*lle 11

更新:从iOS 5.0开始,如果您有可用的背景图像,现在可以执行此操作

searchBar.backgroundImage = someUIImage;
Run Code Online (Sandbox Code Playgroud)

(仅在iOS 6上测试过,因此可能会在5上进行测试!请检查一下.)

布兰登的答案不再适用(或者不适合我,所以我环顾四周并注意到:

(gdb) po [searchBar subviews]
<__NSArrayM 0x665ab80>(
<UISegmentedControl: 0x63aad80; frame = (0 0; 225 44); opaque = NO; layer = <CALayer: 0x6368420>>,
<UISearchBarBackground: 0x6347280; frame = (0 0; 225 44); layer = <CALayer: 0x638a230>>,
<UISearchBarTextField: 0x6331110; frame = (0 0; 0 0); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x63a20f0>>
)
Run Code Online (Sandbox Code Playgroud)

第三个条目是一个自定义文本字段,大概是我想要的那个,我想,但是从superview中删除子视图0和1并没有奇怪地解决它.我最终得到了以下内容,它确实有效:

UITextField *sbTextField = (UITextField *)[searchBar.subviews lastObject];
[sbTextField removeFromSuperview];
[self.view addSubview:sbTextField];
sbTextField.frame = searchBar.frame;
[searchBar removeFromSuperview];
Run Code Online (Sandbox Code Playgroud)

为了使其更加健壮,检查该类是文本字段的子类可能是个好主意,但除非它中断,我只是简单地说.

编辑:切换objectAtIndex:2lastObject作为tipycalFlow建议.


Wea*_*ish 10

对于寻找答案的未来访客.我发现以下内容在iOS 5+中有效并且更喜欢它,因为它不涉及搞乱UISearchBar本身的布局.

UISearchBar * search = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 44)];
[search setBackgroundColor:[UIColor clearColor]];
[search setPlaceholder:@"Search"];

for (UIView * v in [search subviews]) {
    if (![v isKindOfClass:[UITextField class]]) {
        v.alpha = 0;
    }
}

[header addSubview:search];
[search release];
Run Code Online (Sandbox Code Playgroud)


ken*_*ytm 2

UISearchBar 背景无法通过公共方法隐藏(分配透明颜色,因为这tintColor没有帮助)。

如果您想精确控制文本字段的样式,则应该使用 UITextField。