我遇到了一个引起严重问题的问题。
在Interface Builder中,我有一个仅包含tableview的场景。此子类的控制器UITableViewController。我有另一个场景,顶部有一个高度为50的视图,横跨视图的宽度。下面是一个最终包含列表或地图的容器视图。控制器是UIViewController的子类。这是模拟器上的样子......
请注意,您在上图中看到的列表是完全不同的表和视图控制器。搜索栏控制器用于按城市或邮政编码搜索位置。搜索栏控制器的表视图覆盖其他列表。当从搜索表中选择一个位置时,该位置的区域将被馈送到另一个控制器,该控制器使用私有Web服务来检索感兴趣的点列表。
我正在调用以下方法将搜索栏添加到上述视图中。
- (void)setupSearchView {
self.searchTableViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"LocationSearchTable"];
self.searchController = [[UISearchController alloc] initWithSearchResultsController:self.searchTableViewController];
self.searchController.searchResultsUpdater = self.searchTableViewController;
[self.searchController.searchBar sizeToFit];
self.searchController.searchBar.tag = 9189;
self.searchController.searchBar.placeholder = @"Search by city or ZIP code";
[self.searchView addSubview:self.searchController.searchBar];
[[self.searchView viewWithTag:9189] becomeFirstResponder];
self.searchController.hidesNavigationBarDuringPresentation = false;
self.searchController.dimsBackgroundDuringPresentation = true;
self.definesPresentationContext = true;
}
当我在文本字段中单击,并将self.definesPresentationContext设置为true时,搜索栏会下拉导航栏的确切高度,在其上方留下一个大的空白区域。
如果self.definesPresentationContext为false,则行为和结果不同。在这种情况下,当我点击搜索字段时,一切看起来都很好。但是一旦我开始键入,导航控制器就会被白色覆盖。搜索栏不会改变位置。如果我使用Reveal,我可以看到导航栏已被推回堆栈中。这就是看起来像......
我错过了什么?
答案 0 :(得分:0)
我有同样的问题。在屏幕上进行每次更改后,添加一个搜索栏及其框架,以使其不会下降。该代码应有助于解决问题:
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
self.searchController.searchBar.frame = CGRect(x: 0, y: 0, width: self.view.bounds.width, height: 50)
self.view.addSubview(searchController.searchBar)
}
并在viewDidLoad
中使用:
self.extendedLayoutIncludesOpaqueBars = true
答案 1 :(得分:0)
Swift 5.x解决方案:
将 edgesForExtendedLayout 设置为无或为空将解决此问题。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.edgesForExtendedLayout = []
}