我在UINavigationBar上面添加UISearchBar并设置UIsearchbar showsCancelButton YES,在iOS6中正常工作但在iOS7中没有显示取消按钮。 我使用下面的代码片段
UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 600, 44)];
searchBar.showsCancelButton = YES;
searchBar.translucent = NO;
[searchBar setTintColor:[UIColor redColor]];
searchBar.backgroundColor = [UIColor yellowColor];
[self.navigationController.navigationBar addSubview:searchBar];
答案 0 :(得分:44)
出于某种原因,iOS7在添加到导航栏时不显示取消按钮。如果您尝试将其设置为navigationItem的titleView,也会发生这种情况。
您可以先将UISearchBar包装在另一个UIView中,以避免此问题。这是我作为titleView:
的方式UISearchBar *searchBar = [UISearchBar new];
searchBar.showsCancelButton = YES;
[searchBar sizeToFit];
UIView *barWrapper = [[UIView alloc]initWithFrame:searchBar.bounds];
[barWrapper addSubview:searchBar];
self.navigationItem.titleView = barWrapper;
答案 1 :(得分:6)
我有类似的问题,在iPhone搜索栏上显示取消按钮,但在iPad上没有显示取消按钮。将UIsearchBar包装到UIView就像@Rodskjegg抛出样式问题一样。在iPad上UIsearchBar将其设置为navigationItem的titleView,并将UIBarButtonItem作为UIBarButtonSystemItemCancel添加到setRighttBarButtonItem。
[self.navigationItem setLeftBarButtonItem:Nil animated:YES];
self.navigationItem.titleView = self.searchBar;
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
{
UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(searchBarCancelButtonClicked:)];
[self.navigationItem setRightBarButtonItem: cancelButton animated:YES];
}
else {
[self.navigationItem setRightBarButtonItem: nil animated:YES];
}
答案 2 :(得分:4)
从iOS 7开始,您只需在displaysSearchBarInNavigationBar
上将属性YES
设置为UISearchDisplayController
,即可在NavigationBar中自动获取UISearchbar
。
答案 3 :(得分:4)
是 在iOS 7中,按钮位于屏幕上,但它的标题可能是不可见的 我的解决方案是将搜索样式设置为“最小”并在IB中选择“取消”文本颜色的条纹色调
模拟器中的结果:
答案 4 :(得分:3)
我遇到了同样的问题,这是我的解决方案,希望这有帮助。
进一步说明:
我发现将setShowsCancelButton:animated:
发送到searchBar,它就像魔法一样。将搜索栏添加到导航栏的最简洁方法是self.navigationItem.titleView = self.searchBar;
调用setShowsCancelButton:animated:
的适当时机是searchBarTextDidBeginEditing:
和searchBarTextDidEndEditing:
委托方法,所以请记住设置{{1}成为searchBar的委托。
self
答案 5 :(得分:1)
我有同样的问题,在iPhone上搜索取消显示得很好,但在iPad上却没有。
将UISearchBar包装在另一个UIView中的解决方法对我来说并不好用,因为它在旋转时有不同的外观和错误的宽度。
我的解决方案很简单 - 使用搜索WITHOUT取消,并添加取消作为UIBarButtonItem。
答案 6 :(得分:0)
实施搜索栏委托并使用:
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
searchBar.showsCancelButton = YES;
}