iOS7在UINavigationBar中添加UIsearchbar时未显示取消按钮

时间:2013-09-24 15:51:49

标签: uinavigationbar ios7 uisearchbar

我在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];

7 个答案:

答案 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中选择“取消”文本颜色的条纹色调

enter image description here

模拟器中的结果:

enter image description here

答案 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;
}