UISearchBar 最小样式与范围按钮错误?
Posted
技术标签:
【中文标题】UISearchBar 最小样式与范围按钮错误?【英文标题】:UISearchBar minimal style with scope buttons bug? 【发布时间】:2015-01-25 23:37:17 【问题描述】:当我将最小样式设置为搜索栏时发生了错误。我的代码在这里:
- (void)viewDidLoad
sc = [[UISearchController alloc] initWithSearchResultsController:nil];
sc.searchResultsUpdater = self;
sc.delegate = self;
sc.dimsBackgroundDuringPresentation = NO;
sc.searchBar.delegate = self;
self.definesPresentationContext = YES;
[sc.searchBar setPlaceholder:@"Search"];
[sc.searchBar setSearchBarStyle:UISearchBarStyleMinimal];
[sc.searchBar sizeToFit];
[sc.searchBar setScopeButtonTitles:[NSArray arrayWithObjects:@"item1",@"item2",@"item3", nil]];
sc.searchBar.delegate = self;
self.tableView.tableHeaderView = sc.searchBar;
结果(触摸内部之前):
当我触摸搜索栏时,它的开始看起来很正常。其他搜索栏样式也可以正常工作。
编辑
尝试过这种方式;范围按钮在图片中出现第二个,然后消失了。
-(void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
[sc.searchBar setScopeButtonTitles:[NSArray arrayWithObjects:@"item1",@"item2",@"item3", nil]];
edit2
当我将[sc.searchBar setShowsScopeBar:YES]
放入viewDidLoad
方法时,我得到第三个版本(触摸前搜索栏下的项目):
触摸后界面又恢复正常了:
【问题讨论】:
让我们开始吧:你为什么要把它设置成UISearchBarStyleMinimal
?
那么,为什么是 [sc.searchBar sizeToFit];
?这是我第一次看到这个。您使用的约束有问题吗?
因为我可以,我猜。 @ArminM 实际上应用程序看起来更好用最小的样式。
您也将sc.searchBar.delegate = self;
设置了两次...也许您应该先清理代码并注释掉不必要的行,看看会发生什么?
但是...从您在问题中向我展示的内容看起来并没有好多少!根据 Apple 的文档:“样式 UISearchBarStyleMinimal 不提供默认背景颜色或图像,但如果这样自定义,则会显示一个。”这是唯一的区别。
【参考方案1】:
Apple 在UISearchBarStyle
上的文档:
此属性可以与
barStyle
一起使用。样式UISearchBarStyleMinimal
不提供默认背景颜色或图像 但如果这样自定义,则会显示一个。
因此,当您将searchBarStyle
设置为UISearchBarStyleMinimal
时,它会删除背景图像和颜色,因此它本质上是透明的。现在要显示范围栏按钮,您必须在设置标题之前将showsScopeBar
属性设置为YES
。所以:
[sc.searchBar setShowsScopeBar:YES];
[sc.searchBar setScopeButtonTitles:[NSArray arrayWithObjects:@"item1",@"item2",@"item3", nil]];
【讨论】:
@OlegSobolev 我自己试过了,解决方法是在设置范围栏按钮的标题之前将showsScopeBar
属性设置为YES
。检查新答案。
你得到的结果和我一样吗? @Armin
是的。没有[sc.searchBar setShowsScopeBar:YES];
,它看起来和你的结果一模一样。以上是关于UISearchBar 最小样式与范围按钮错误?的主要内容,如果未能解决你的问题,请参考以下文章
如果在 viewDidAppear 之前显示,UISearchBar 取消按钮没有样式
如何在 iOS 8 中使用 UISearchController,其中 UISearchBar 在我的导航栏中并且有范围按钮?