Ios 搜索结果未与UISearchController的搜索栏对齐
我正试图从Ios 搜索结果未与UISearchController的搜索栏对齐,ios,uitableview,uisearchcontroller,Ios,Uitableview,Uisearchcontroller,我正试图从UISearchDisplayController升级到UISearchController,但它有很多奇怪的问题。当前的问题是搜索结果与搜索栏不对齐。在纵向模式下,搜索栏和第一个搜索结果之间有一个小间隙: (我已将结果表视图的背景涂成黄色,以显示其扩展) 对于横向模式,情况正好相反:搜索栏与结果顶部重叠: 很奇怪,如果我在结果视图仍然可见的情况下旋转视图,结果会非常完美 我的设置是一种非常标准的方法,搜索栏位于导航栏中,搜索结果位于单独的UITableViewController
UISearchDisplayController
升级到UISearchController
,但它有很多奇怪的问题。当前的问题是搜索结果与搜索栏不对齐。在纵向模式下,搜索栏和第一个搜索结果之间有一个小间隙:
(我已将结果表视图的背景涂成黄色,以显示其扩展)
对于横向模式,情况正好相反:搜索栏与结果顶部重叠:
很奇怪,如果我在结果视图仍然可见的情况下旋转视图,结果会非常完美
我的设置是一种非常标准的方法,搜索栏位于导航栏中,搜索结果位于单独的UITableViewController
中。
原始视图控制器中的代码:
- (void) viewDidLoad
{
[super viewDidLoad];
SearchResults *searchResults = [[SearchResults alloc] init];
searchController = [[UISearchController alloc] initWithSearchResultsController:searchResults];
searchController.searchResultsUpdater = searchResults;
self.navigationItem.titleView = searchController.searchBar;
searchController.hidesNavigationBarDuringPresentation = NO;
searchController.dimsBackgroundDuringPresentation = YES;
self.definesPresentationContext = YES;
}
SearchResults
是一个标准的UITableViewController
子类,没有特殊的格式
我怀疑这是由于tableview的内容插入不正确,所以我在视图willlayoutsubviews
中打印了这些内容,这证实了我的怀疑
如何解决UISearchController
中这个明显的错误
注意:我已经尝试对结果表视图使用edgesForExtendedLayout
、automaticallyAdjustsScrollViewInsets
和ExtendedLayoutinClude不透明条的任意组合
编辑:
我现在已经在Apple上记录了一个bug:我找到了一个在所有情况下都能正常工作的解决方案。如果有人能在原始代码中发现我做错了什么,我还是会很感激的
对于解决方法,请在SearchResults类中添加以下内容:
- (void) viewWillLayoutSubviews
{
// Workaround for bug in UISearchController:
CGFloat topInset = self.topLayoutGuide.length + (_searchController ? _searchController.searchBar.frame.size.height : 44);
UIEdgeInsets insets = self.tableView.contentInset;
if (topInset != insets.top) {
// set the correct insets
insets.top = topInset;
self.tableView.contentInset = insets;
// scroll to the top
self.tableView.contentOffset = CGPointMake(0, -topInset);
}
}
我现在已经找到了一种在所有情况下都有效的方法。如果有人能在原始代码中发现我做错了什么,我还是会很感激的
对于解决方法,请在SearchResults类中添加以下内容:
- (void) viewWillLayoutSubviews
{
// Workaround for bug in UISearchController:
CGFloat topInset = self.topLayoutGuide.length + (_searchController ? _searchController.searchBar.frame.size.height : 44);
UIEdgeInsets insets = self.tableView.contentInset;
if (topInset != insets.top) {
// set the correct insets
insets.top = topInset;
self.tableView.contentInset = insets;
// scroll to the top
self.tableView.contentOffset = CGPointMake(0, -topInset);
}
}