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)
小智 24
这里有一个适用于iOS 5和iOS 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开始,我建议采用以下方式,这样可以避免弄乱未记录的子视图.更换self用self.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:2到lastObject作为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)
| 归档时间: |
|
| 查看次数: |
29340 次 |
| 最近记录: |