当我在iPhone 5S上运行它工作正常时,搜索栏就会显示出来。但是当我在iPhone 4S上运行时,搜索栏不会显示,如下图所示:
在模拟器上运行会以任一尺寸正确显示搜索栏。在我的viewDidLoad
中,我有以下代码:
- (void)viewDidLoad {
[super viewDidLoad];
[self.processTableView setDelegate:self];
[self.processTableView setDataSource:self];
self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
self.searchController.searchResultsUpdater = self;
self.processTableView.tableHeaderView = self.searchController.searchBar;
self.definesPresentationContext = YES;
}
我刚发现我的问题与第self.processTableView.tableHeaderView = self.searchController.searchBar;
行有关,但我不明白为什么。有没有人知道这里发生了什么?
答案 0 :(得分:1)
这是我实现它的方式:
self.searchController =
[[UISearchController alloc] initWithSearchResultsController:nil];
self.searchController.searchResultsUpdater = self;
self.searchController.dimsBackgroundDuringPresentation = NO;
self.searchController.searchBar.delegate = self;
self.tableView.tableHeaderView = self.searchController.searchBar;
self.definesPresentationContext = YES;
[self.searchController.searchBar sizeToFit];
self.searchController.hidesNavigationBarDuringPresentation = NO;
答案 1 :(得分:1)
我使用了@ user1079052提供的部分代码:
[self.searchController.searchBar sizeToFit];
self.searchController.hidesNavigationBarDuringPresentation = NO;
将其添加到我现有的代码中,使得iPhone 4S上的搜索栏可见,并在iPhone 5S上保持相同的行为。但是,搜索栏显示在表视图上。为了解决这个问题,我计算了条形高度并重新设置。所以,我的viewDidLoad
看起来像这样:
- (void)viewDidLoad {
[super viewDidLoad];
[self.processTableView setDelegate:self];
[self.processTableView setDataSource:self];
self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
self.searchController.searchResultsUpdater = self;
self.searchController.dimsBackgroundDuringPresentation = NO;
self.processTableView.tableHeaderView = self.searchController.searchBar;
[self.searchController.searchBar sizeToFit];
self.searchController.hidesNavigationBarDuringPresentation = NO;
CGFloat height = [self.searchController.searchBar systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
CGRect frame = self.searchController.searchBar.frame;
frame.size.height = height;
self.searchController.searchBar.frame = frame;
self.processTableView.tableHeaderView = self.searchController.searchBar;
}
我要感谢所有回复。
答案 2 :(得分:0)
我认为您应该将searchController的搜索栏添加到headerView,而不是将HeaderView设置为searchBar。类似的东西:
[self.processTableView.tableHeaderView addSubview:self.searchController.searchBar];
如果您这样做,则意味着可以从故事板中删除searchBar。
答案 3 :(得分:0)
如果在向下滚动时看到后面的栏,应该是一个约束问题。尝试删除manualy约束(不是"明确约束")。