使用UISearchController以编程方式定位UISearchBar
我试图将我的UISearchBar直接置于我的UINavigationBar下,但我遇到的问题是它根本没有出现。 我正在使用iOS8的新searchController。
self.searchController = [[UISearchController alloc] initWithSearchResultsController:searchResultsController]; self.searchController.searchResultsUpdater = self; self.searchController.searchBar.frame = CGRectMake(self.searchController.searchBar.frame.origin.x, self.searchController.searchBar.frame.origin.y, self.searchController.searchBar.frame.size.width, 44.0); self.salesTableView.tableHeaderView = self.searchController.searchBar;
目前我正在使用正确添加到我的UITableView标头的那个,但问题是它滚动表不是我想要的表。 我想把它放在我的桌面视图之上,所以它反而尝试了但现在似乎已经消失了,除非我没有使用正确的值?
self.searchController = [[UISearchController alloc] initWithSearchResultsController:searchResultsController]; self.searchController.searchResultsUpdater = self; self.searchController.searchBar.frame = CGRectMake(0, 0, self.searchController.searchBar.frame.size.width, 44.0); // self.salesTableView.tableHeaderView = self.searchController.searchBar;
因为原点是(0,0),它将被状态栏和导航栏隐藏。 如果更改为,您应该会看到搜索栏:
self.searchController.searchBar.frame = CGRectMake(0, 64, self.searchController.searchBar.frame.size.width, 44.0);
我有两个解决方案。 我将向您展示简单的方法(您也可以使用storyboard):在ViewController中创建一个名为searchBarView
的UIView; 将self.searchController.searchBar
添加到searchBarView
; 将searchBarView
添加到ViewController。
UIView *searchBarView = CGRectMake(0, 64, self.searchController.searchBar.frame.size.width, 44); [searchBarView addSubView:self.searchController.searchBar]; [self.view addSubView:searchBarView];
我假设您在viewDidload中设置了搜索控制器self.searchController.searchBar.sizeToFit()
。 如果它是通用应用程序,您需要添加此方法(至少在我的情况下,使一切正常):
- (void)viewDidLayoutSubviews { // you could check // if (IS_IPAD || (IS_IPHONE_6PLUS && UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation))) [self.searchController.searchBar sizeToFit]; }
这是我在stackoverflow上的第一个答案。 希望这有帮助^^。
要检查两件事:
-
尝试在
UIViewController
上将automaticallyAdjustsScrollViewInsets
设置为false
。 这应该将视图控制器视图的子视图移动到导航栏下方。 -
使用
searchFieldBackgroundPositionAdjustment
(可用iOS 5+)调整UISearchBar
内搜索字段的位置
用法:
let searchBar = UISearchBar() searchBar.searchFieldBackgroundPositionAdjustment = UIOffset(horizontal: 0, vertical: 10)