搜索栏正好显示64个点太低:
所有其他帧都完全正确。
编辑:
- UISearchController
的观点出错origin.y
。当它应该为0时,它被设置为64。
如果我添加此方法:
- (void)didPresentSearchController:(UISearchController *)searchController
{
[super didPresentSearchController:searchController];
searchController.view.frame = CGRectMake(0, 0, searchController.view.frame.size.width, searchController.view.frame.size.height);
}
然后视图对齐。然而,它的janky因为它跳跃。如果我在willPresentSearchController
中修改框架它不起作用,因为控制器在呈现后必须进行某种布局。
如果我使用SparkInspector,并从origin 64(它设置为0)编辑UISearchBarContainerView
的帧,问题就解决了。
以下是我的相关配置:
self.searchResultsController = [[GMSearchTableViewController alloc] init];
self.definesPresentationContext = YES;
self.searchController = [[UISearchController alloc] initWithSearchResultsController:self.searchResultsController];
self.searchController.dimsBackgroundDuringPresentation = YES;
self.searchController.hidesNavigationBarDuringPresentation = NO;
self.searchController.searchBar.frame = CGRectMake(0, 0, self.view.frame.size.width, 44);
[self.view addSubview:self.searchController.searchBar];
我没有使用Interface Builder,所有内容都是在代码中配置的。
我很肯定设置definesPresentationContext
是正确的。
VC位于一个普通的UINavigationController
,它位于SplitViewController内部(但iPhone上也存在问题)。
我觉得我错过了UINavigationBar
我还有一个使用自定义容器视图控制器模型的不同控制器,它更复杂,并且可以工作。
当我设置
self.definesPresentationContext = NO;
所以现在UISearchBar
定位正确,但是演示文稿上下文错误,导致UISearchController
的表格视图占据整个视图。
答案 0 :(得分:11)
在经典时尚中,我找到了一个解决方案(Javascript by reference vs. by value)
这就是诀窍:
- (UIBarPosition)positionForBar:(id<UIBarPositioning>)bar
{
if (bar == self.searchController.searchBar) {
return UIBarPositionTopAttached;
}
else { // Handle other cases
return UIBarPositionAny;
}
}
答案 1 :(得分:0)
如果你的tableView是自定义UItableView而不是UItableViewController你应该隐藏导航栏下的tableview顶部,因为搜索栏自动附加在表视图的标题上,如果你的表视图在导航栏下启动,我会导致这个问题。只需从导航栏顶部全屏显示表格。