我正在尝试从一个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
子类,没有特殊的格式。
我的怀疑是因为桌面视图的contentInset不正确,所以我用viewWillLayoutSubviews
打印了那些,从而证实了这种怀疑。
我如何在UISearchController
中解决这个明显的bug?
注意:我已经尝试将edgesForExtendedLayout
、automaticallyAdjustsScrollViewInsets
和extendedLayoutIncludesOpaqueBars
的任何组合用于结果表视图。
编辑:我现在已经用苹果记录了一个bug:https://openradar.appspot.com/radar?id=6138130516148224
发布于 2016-10-28 06:41:34
我已经找到了一种似乎适用于所有情况的解决办法。如果有人能发现我在原始代码中做错了什么,我还是会很感激的。
为了解决这个问题,在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);
}
}
https://stackoverflow.com/questions/40262370
复制相似问题