UISearchController searchBar在第一次单击时消失

el-*_*lor 4 uisearchbar tableview ios uisearchcontroller

我在TableView中实现了一个UISearchController,由一个导航控制器推送.

首先我的问题是每当我点击SearchBar时,它就会消失.当我输入一些文本时,它可以工作,但它保持完全空白.然后我设法使用此代码半解决问题:

- (void)searchForText:(NSString*)searchText
{
    [self.view addSubview:villeSearchController.searchBar];
}
Run Code Online (Sandbox Code Playgroud)

哪个半工作因为现在,当我点击搜索栏时,它会消隐,但是如果我输入一个字符,它会再次出现,然后它就会停留在那里,无论如何.直到我取消搜索,然后再次点击它,在这种情况下它会消隐.我做了一些测试,并在第一次点击时调用此方法(searchForText),因此这不是原因.

有谁知道我如何解决这个问题并让搜索栏从第一次点击出现?

编辑:

这是我初始化SearchController的方法:

villeSearchController = [[UISearchController alloc]   initWithSearchResultsController:nil];
villeSearchController.searchResultsUpdater = self;
villeSearchController.dimsBackgroundDuringPresentation = NO;
villeSearchController.searchBar.delegate = self;
villeTableView.tableHeaderView = villeSearchController.searchBar;
villeSearchController.searchBar.scopeButtonTitles = @[];
self.definesPresentationContext = YES;
[villeSearchController.searchBar sizeToFit];
Run Code Online (Sandbox Code Playgroud)

Mat*_*erg 17

UISearchController隐藏导航栏时,这发生在我身上.设置此属性修复它:

UISearchController.hidesNavigationBarDuringPresentation = NO;


Ser*_*kov 13

尝试检查navigationBar.translucent属性 - 当UISearchController呈现时应该是YES,searchBar否则将是UI错误.

来自@SiavA的更新

更好的解决方案是使用的extendedLayoutIncludesOpaqueBars属性UIViewController.如果您使用不透明导航栏,只需将其设置在true将要显示的for控制器中UISearchController(不适用于navigationController).

例如

- (void)viewDidLoad {
    [super viewDidLoad];

    self.extendedLayoutIncludesOpaqueBars = !self.navigationController.navigationBar.translucent;
}
Run Code Online (Sandbox Code Playgroud)