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

时间:2018-04-01 12:13:27

标签: ios objective-c uiscrollview ios11 uisearchcontroller

我无法找到一种方法将UIScrollView滚动到顶部的方式与UIStatusBar包含UINavigationItem时的UISearchController相同。在这种情况下,滚动视图滚动到顶部,包括显示搜索栏的。如果我尝试与通常的嫌疑人(调用滚动,设置内容偏移等)这样做,我似乎无法显示搜索栏。

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

1 个答案:

答案 0 :(得分:1)

在我看来,我认为Apple在这里使用私有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;
    

结果:

enter link description here

工作代码:

[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