UISearchController 搜索栏位置下降 64 点

Posted

技术标签:

【中文标题】UISearchController 搜索栏位置下降 64 点【英文标题】:UISearchController Search Bar Position Drops 64 points 【发布时间】:2016-01-29 20:00:46 【问题描述】:

搜索栏正好显示 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);


然后视图对齐。但是,它很笨拙,因为它会跳跃。如果我修改 willPresentSearchController 中的框架,它就不起作用,因为控制器必须在其呈现后进行某种布局。

如果我使用 SparkInspector,并从原点 64 编辑 UISearchBarContainerView 的框架(设置为 0),问题就解决了。

这是我的相关配置:

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 的简单配置选项

我还有一个不同的控制器,它使用自定义的 Container View Controller 模型,这种模型更复杂,并且可以工作。

当我设置时

self.definesPresentationContext = NO;

会发生这种情况:

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

【问题讨论】:

感谢您为我的问题提供解决方案。它有帮助。 self.definesPresentationContext = NO; 【参考方案1】:

以经典方式,我找到了解决方案 (https://***.com/a/30010473/579217)

这就是诀窍:

- (UIBarPosition)positionForBar:(id<UIBarPositioning>)bar

  if (bar == self.searchController.searchBar) 
    return UIBarPositionTopAttached;
  
  else  // Handle other cases
    return UIBarPositionAny;
  

【讨论】:

【参考方案2】:

如果您的 tableView 是自定义 UItableView 而不是 UItableViewController 您应该隐藏导航栏下的 tableview 顶部,因为搜索栏自动附加在 table view 的标题上,如果您的 table view 在导航栏下启动,我会导致这个问题。只需从导航栏顶部将表格视图设为全屏即可。

【讨论】:

我的表格视图是自定义的,但是我使用表格视图的 contentInsets 而不是标题视图手动附加搜索栏,因为我希望它始终可见。我之前让搜索控制器隐藏了导航栏,但它看起来很乱,我个人喜欢让导航栏仍然可见,这样用户可以在搜索的同时快速访问其他操作。 因此,如果 tableview 是自定义的,只需在 tableview 之前添加搜索栏,而不是在其中。然后在搜索栏下添加表格视图并在搜索栏下隐藏表格视图的标题。它会如你所愿。:)

以上是关于UISearchController 搜索栏位置下降 64 点的主要内容,如果未能解决你的问题,请参考以下文章

UISearchController 搜索栏无法激活

UISearchController 搜索栏与 CollectionView 重叠

在 UISearchController 下添加水平滚动过滤器选项

无法在使用 UISearchController 实现的搜索栏中更改 TF 的背景颜色

激活和停用 UISearchController 时 UITableView 在位置之间跳转

UISearchController 搜索栏不隐藏导航栏