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

Jac*_*kYi 22 uinavigationbar uisearchbar ios7

我在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];
Run Code Online (Sandbox Code Playgroud)

Rod*_*egg 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;
Run Code Online (Sandbox Code Playgroud)

  • 确实条形图的样式发生了变化,并且与nav.bar不太匹配.我做了至少满足我需要的searchBar.searchBarStyle = UISearchBarStyleMinimal. (2认同)

vca*_*lfa 6

我有类似的问题,在iPhone搜索栏上显示取消按钮,但在iPad上没有显示取消按钮.将UIsearchBar包装到UIView就像@Rodskjegg抛出样式问题一样.在iPad UIsearchBar上将其设置为navigationItem的titleView,并将UIBarButtonItem添加到setRighttBarButtonItem作为UIBarButtonSystemItemCancel.

    [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];
    }
Run Code Online (Sandbox Code Playgroud)