ios - 如何从 navigationItem 添加和删除 searchBar
问题描述
我在向 UINavigationBar 添加和删除 UISearchControllers searchBar 时遇到问题。
这是我正在做的事情:
将 searchBar 添加到视图
searchController = [[UISearchController alloc]initWithSearchResultsController:nil];
searchController.searchResultsUpdater = self;
searchController.searchBar.delegate = self;
searchController.dimsBackgroundDuringPresentation = NO;
searchController.hidesNavigationBarDuringPresentation = NO;
searchController.searchBar.searchBarStyle = UISearchBarStyleProminent;
searchController.searchBar.barTintColor = [UIColor blackColor];
searchController.searchBar.tintColor = [UIColor darkGrayColor];
[searchController.searchBar setFrame:CGRectMake(0, 200, 320, searchController.searchBar.frame.size.height)];
[self.view addSubview:searchController.searchBar];
在按钮上单击将 searchBar 添加到 navigationItem 这按预期工作
[self.navigationController setNavigationBarHidden:false];
self.navigationItem.titleView = searchController.searchBar;
self.navigationItem.hidesBackButton = true;
这是我得到奇怪行为的地方:
在另一个按钮上单击从导航栏中删除 searchBar 并将其添加回视图
[searchController.searchBar removeFromSuperview];
[self.navigationController setNavigationBarHidden:YES animated:true];
[self.view addSubview:searchController.searchBar];
[searchController.searchBar setFrame:CGRectMake(0, 200, 320, searchController.searchBar.frame.size.height)];
searchBar 按预期从导航栏中删除,但不会返回到主视图。(好吧,我在任何地方都看不到它)
我记录了搜索栏的值,我可以看到它有我给它的框架。
在这里的任何帮助将不胜感激,
谢谢
解决方案
您应该设置navigationItem .titleView
为nil
第一个并setFrame:
在主线程中。
- (IBAction)addBar:(id)sender {
self.navigationItem.titleView = nil;
[searchController.searchBar removeFromSuperview];
[self.navigationController setNavigationBarHidden:NO animated:YES];
self.navigationItem.titleView = searchController.searchBar;
self.navigationItem.hidesBackButton = YES;
}
- (IBAction)removeBar:(id)sender {
self.navigationItem.titleView = nil;
[searchController.searchBar removeFromSuperview];
[self.view addSubview:searchController.searchBar];
[self.navigationController setNavigationBarHidden:YES animated:YES];
dispatch_async(dispatch_get_main_queue(), ^{
[self->searchController.searchBar setFrame:CGRectMake(0, 200, 320, self->searchController.searchBar.frame.size.height)];
});
}
顺便说一句,我认为UIView
在添加到navigationItem.titleView
.
推荐阅读
- c++ - std::fstream 需要很长时间才能将大数据写入 .csv 文件
- visual-studio - Xamarin 应用程序无法在 Android 设备上调试
- python - 如何打印循环迭代的最后一个值
- python - 使用 SavedModel 或 freeze_graph.pb 进行 Tensorflow 2.0 推理
- vue.js - vuejs 属性中的这个语法 `${k}` 是什么?
- puppeteer - 自 2019 年 8 月 15 日起,Puppeteer 下载未能安装 Chromium
- c# - 在 unity3D 中编辑或不编辑 Transform.rotation
- javascript - 使用 javascript 自动引用
- linux - 删除具有相似名称的文件,除了一个?
- oracle - 替换字符串中点后的空格