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 取消按钮没有样式

UISearchBar 的范围按钮覆盖了第一行结果

如何在 iOS 8 中使用 UISearchController,其中 UISearchBar 在我的导航栏中并且有范围按钮?

动态更改 UISearchBar 的键盘类型

UISearchBar-更改范围而不使表格变灰?

UISearchBar 取消按钮颜色?