很多項目上的需求都是在navigationBar下面添加一個UISearchBar,之前我這個項目也是,但是需求改了,要求加到navabar上去,好吧,那就做唄,無非就是將UISearchBar加到navigationItem的titleView上去(這里用的是原生的,被沒有自定義navigationBar),但是真做起來坑還是比較多的
我這個項目是用的UISearchViewController,回頭會將searchController.searchBar添加上去.如果是自定的UISearchBar,我倒是沒有試過.
首先來看下效果圖:
需求是這樣:
現(xiàn)在我們來開始說我遇見的坑吧
一. 無法設置searchBar的大小,反正會很長.
解決方案: 自定義一個view,將searchBar添加到view上,然后將view設置為titleView即可解決問題,不妨試試調(diào)整view的大小看看效果,注意,約束的時候是貼邊的.
UIView *titView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 300, 40)]; titView.backgroundColor = [UIColor colorWithRed:9/255.0 green:87/255.0 blue:131/255.0 alpha:1]; self.titView = titView; [titView addSubview:self.searchController.searchBar]; [self.searchController.searchBar mas_makeConstraints:^(MASConstraintMaker *make) { make.left.top.right.bottom.equalTo(titView); }];
二. 設置完searchBar的背景顏色會出現(xiàn)上下兩條黑線(圖就不截了)
解決方案:
// 去除searchbar上下兩條黑線及設置背景 self.searchController.searchBar.barTintColor = [UIColor colorWithRed:9/255.0 green:87/255.0 blue:131/255.0 alpha:1]; UIImageView *barImageView = [[[self.searchController.searchBar.subviews firstObject] subviews] firstObject]; barImageView.layer.borderColor = [UIColor colorWithRed:9/255.0 green:87/255.0 blue:131/255.0 alpha:1].CGColor; barImageView.layer.borderWidth = 1;
三. 這是最坑的地方,點擊searchBar,searchBar會出現(xiàn)下移的問題
先看圖:
!!!注意現(xiàn)在的searchBar已經(jīng)超出了navigationBar.
這個問題我查找了一上午的資料,但是沒有找到合適的,最后自己瞎蒙了一下把問題解決了,如何有更合適的解決方案,希望能告知我,大家共同學習,共同進步.
解決方案: 在searchBar的代理方法里面更新約束即可.
-(void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar { [self.searchController.searchBar mas_updateConstraints:^(MASConstraintMaker *make) { make.left.right.equalTo(self.titView); make.top.equalTo(self.titView).offset(-2); make.bottom.equalTo(self.titView).offset(-2); }]; }
最后貼上效果圖吧
因為我看網(wǎng)上很少說這塊內(nèi)容的,所以就簡單寫一下,希望能夠幫到正在閱讀的你!!!