IOS -UISearchController UISearchBar
来源:互联网 发布:淘宝上的算命准吗 编辑:程序博客网 时间:2024/05/17 02:48
前言
UISearchController是个坑啊,苹果为了,让开发者快速构架一块app,简化开发,私下添加太多东西,搞迷糊了。但是实际开发过程中,给的都需要重新去自定义,所以出现了很多莫名其妙的问题,究竟是不好呢,还是不好呢^_^
用UISearchController主要是为了hidesNavigationBarDuringPresentation这个属性后传来的动画效果,如果不用这个的话,我倒是很愿意直接用UISearchBar了
代码部分
实现<UISearchControllerDelegate,UISearchResultsUpdating>定义@property (nonatomic,strong) UISearchController *searchController; //创建UISearchController self.searchController = [[UISearchController alloc]initWithSearchResultsController:nil]; //设置代理 self.searchController.delegate= self; self.searchController.searchResultsUpdater = self; //包着搜索框外层的颜色 // self.searchController.searchBar.barTintColor = [UIColor lig]; // self.searchController.searchBar.tintColor = [UIColor orangeColor]; //提醒字眼 self.searchController.searchBar.placeholder= @"搜索"; //提前在搜索框内加入搜索词 self.searchController.searchBar.text = @""; //设置UISearchController的显示属性,以下3个属性默认为YES //搜索时,背景变暗色 self.searchController.dimsBackgroundDuringPresentation = NO; //搜索时,背景变模糊 // self.searchController.obscuresBackgroundDuringPresentation = YES; //点击搜索的时候,是否隐藏导航栏 self.searchController.hidesNavigationBarDuringPresentation = YES; //位置 [_searchController.searchBar sizeToFit]; self.tableView.tableHeaderView = self.searchController.searchBar;
searchBar样式
// searchbar 样式 //设置背景图是为了去掉上下黑线 self.searchController.searchBar.backgroundImage =[UIImage imageWithColor:kWhiteColor size:CGSizeMake(kMinScreenWidth, 44)]; // 设置SearchBar的颜色主题为白色 self.searchController.searchBar.barTintColor = [UIColor whiteColor]; self.searchController.searchBar.delegate = self; UITextField *searchField = [self.searchController.searchBar valueForKey:@"searchField"]; if (searchField) { [searchField setBackgroundColor:kColorWithHex(@"f8f8f8")]; searchField.layer.cornerRadius = 14.0f; // searchField.layer.borderColor = [UIColor colorWithRed:247/255.0 green:75/255.0 blue:31/255.0 alpha:1].CGColor; // searchField.layer.borderWidth = 1; searchField.layer.masksToBounds = YES; }
空搜索
//空搜索 UITextField *searchBarTextField = nil; NSArray *views = ([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0) ? self.searchController.searchBar.subviews : [[self.searchController.searchBar.subviews objectAtIndex:0] subviews]; for (UIView *subview in views) { if ([subview isKindOfClass:[UITextField class]]) { searchBarTextField = (UITextField *)subview; break; } } searchBarTextField.enablesReturnKeyAutomatically = NO; searchBarTextField.returnKeyType = UIReturnKeyDone;
重点
- searchController输入状态的时候,searchbar会跑到状态栏后边
self.definesPresentationContext=YES;
2.如果把searchBar当做tableView的headerVIew的使用,在方法- (void)willPresentSearchController:(UISearchController *)searchController
tableView已经reloadData了tableView.frame.y需要向下移动20个单位
CGRect tableFrame = self.tableView.frame; tableFrame.origin.y = 20; tableFrame.size.height = self.view.frame.size.height -20; self.tableView.frame = tableFrame; [UIView animateWithDuration:0.4 animations:^{ [self.view layoutIfNeeded]; [self.tableView layoutIfNeeded]; }];
3.如果还没有需要向上移动20个单位,然后再- (void)willDismissSearchController:(UISearchController *)searchController
让tableVIew会到原始位置
4.如果进入预编辑状态,searchBar消失(UISearchController套到TabBarController可能会出现这个情况),请添加下边这句话
- (void)didPresentSearchController:(UISearchController *)searchController{ [self.view addSubview:self.searchController.searchBar];}
5.如果UISearchController进入编辑状态后,导航栏遮挡住20加上
-(void)viewDidLayoutSubviews { if(self.searchController.active) { self.searchController.searchBar.frame = CGRectMake(self.searchController.searchBar.frame.origin.x, 20, self.searchController.searchBar.frame.size.width, 44.0); [UIView animateWithDuration:0.1 animations:^{ [self.view layoutIfNeeded]; [self.searchController.searchBar layoutIfNeeded]; }]; }}
去掉编辑状态下方的黑线
UISearchBar *searchBar = self.searchController.searchBar; UIImageView *barImageView = [[[searchBar.subviews firstObject] subviews] firstObject]; barImageView.layer.borderColor = kWhiteColor.CGColor; barImageView.layer.borderWidth = 1;
优化动态弹出效果
self.navigationController.navigationBar.translucent = YES;
后记
不需要设置这些东西了
// self.definesPresentationContext=YES;// self.edgesForExtendedLayout = UIRectEdgeNone;// self.automaticallyAdjustsScrollViewInsets = NO;
http://www.jianshu.com/p/aa9a153a5b58
阅读全文
0 0
- IOS -UISearchController UISearchBar
- iOS的实时搜索:UISearchBar与UISearchController
- iOS开发 搜索栏UISearchBar和UISearchController
- iOS开发-搜索栏UISearchBar和UISearchController
- iOS开发-搜索栏UISearchBar和UISearchController
- iOS开发-搜索栏UISearchBar和UISearchController
- iOS开发-搜索栏UISearchBar和UISearchController
- iOS开发-搜索栏UISearchBar和UISearchController
- ios搜索框功能的实现/UISearchBar/UISearchController的使用
- UISearchBar 和 UISearchController
- 搜索栏UISearchBar和UISearchController
- 搜索栏UISearchBar和UISearchController
- 搜索栏UISearchBar和UISearchController
- UISearchController VS UISearchBar and UISearchDisplayController
- iOS UISearchController
- iOS - UISearchController
- 【学习ios之路:UI系列】(UISearchBar,UISearchDisplayController) 和UISearchController(iOS8新特性)
- iOS --- 搜索框UISearchController的使用(iOS8.0以后替代UISearchBar + UISearchDisplayController的组合)
- SPOJ
- 设置环境变量配置的简单方法.env
- centos 7 安装 hadoop 2.7.1
- 算法导论20.2-2
- 安装cocoapods遇到error: RPC failed; curl 56 SSLRead() return error -36问题
- IOS -UISearchController UISearchBar
- 5-LTE Security I: LTE Security Concept and LTE Authentication
- 基础练习 FJ的字符串
- Activity的四种启动模式
- AVL_tree
- js报错:uncaught syntaxError:unexpected tokenj
- ThridExam
- Python3正则表达式使用
- extJS 4.2 自定义分页