我可以通过 UISearchController 以编程方式复制 UIStatusBar 上的点击吗?

Can I replicate programmatically what a tap on the UIStatusBar does w/ UISearchController?

我找不到像 UINavigationItem 包含 UISearchControllerUIStatusBar 那样将 UIScrollView 滚动到顶部的方法。在这种情况下,滚动视图滚动到顶部 包括 显示搜索栏。如果我尝试对通常的嫌疑人(调用滚动、设置内容偏移量等)执行此操作,我似乎无法使搜索栏出现。

我能否以编程方式复制点击 UIStatusBar 的功能?

在我看来,我认为Apple在这里使用private API来制作。但是如果你想复制一些看起来像它的东西,让搜索栏出现。您可以按照以下步骤:

  • 滚动UIScrollView到顶部

    self.scrollView.contentOffset = CGPointZero;
    
  • 之后,显示搜索栏和大标题

    // Show large title
    self.navigationItem.hidesSearchBarWhenScrolling = NO;
    // Show search bar
    self.navigationItem.largeTitleDisplayMode = UINavigationItemLargeTitleDisplayModeAlways;
    
  • 显示搜索栏和大标题时,重置 navigationItem 属性以提供 scrollView 正常行为

    self.navigationItem.hidesSearchBarWhenScrolling = YES;
    self.navigationItem.largeTitleDisplayMode = UINavigationItemLargeTitleDisplayModeAutomatic;
    

结果:

工作代码:

[UIView animateWithDuration:0.25f animations:^{
  self.scrollView.contentOffset = CGPointZero;
} completion:^(BOOL finished) {
  [UIView animateWithDuration:0.25f animations:^{
    self.navigationItem.hidesSearchBarWhenScrolling = NO;
    self.navigationItem.largeTitleDisplayMode = UINavigationItemLargeTitleDisplayModeAlways;
  } completion:^(BOOL finished) {
    self.navigationItem.hidesSearchBarWhenScrolling = YES;
    self.navigationItem.largeTitleDisplayMode = UINavigationItemLargeTitleDisplayModeAutomatic;
  }];
}];

更详细的可以看my demo repo