我正在尝试从UISearchDisplayController
升级到UISearchController
,但是遇到了很多奇怪的问题。目前的问题是搜索结果与搜索栏不对齐。在纵向模式下,搜索栏与第一个搜索结果之间存在小差距:
(我已将结果tableview黄色的背景着色,以显示其扩展)
对于横向模式,情况恰恰相反:搜索栏与结果顶部重叠:
绰绰有力,如果我在结果视图仍然可见的情况下旋转视图,它就会完美呈现。
我的设置是一种非常标准的方法,导航栏中有搜索栏,搜索结果位于单独的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的contentInset不正确,所以我在viewWillLayoutSubviews
打印了那些,这证实了这种怀疑。
如何解决UISearchController
中这个明显的错误?
注意:我已尝试将edgesForExtendedLayout
,automaticallyAdjustsScrollViewInsets
和extendedLayoutIncludesOpaqueBars
的任意组合用于结果表格视图。
修改 我现在已经为Apple记录了一个错误:https://openradar.appspot.com/radar?id=6138130516148224
答案 0 :(得分:0)
我现在找到了解决办法,似乎适用于所有情况。如果有人能够在原始代码中发现我做错了,我仍然会感激。
对于解决方法,在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);
}
}