UISearchController搜索栏位置下降64点

时间:2016-01-29 20:00:46

标签: objective-c uisearchbar uisearchcontroller

搜索栏正好显示64个点太低:

enter image description here

所有其他帧都完全正确。

编辑: - 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;

发生这种情况: enter image description here

所以现在UISearchBar定位正确,但是演示文稿上下文错误,导致UISearchController的表格视图占据整个视图。

2 个答案:

答案 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顶部,因为搜索栏自动附加在表视图的标题上,如果你的表视图在导航栏下启动,我会导致这个问题。只需从导航栏顶部全屏显示表格。