我可以用 UISearchController 以编程方式复制 UIStatusBar 上的点击操作吗?
Posted
技术标签:
【中文标题】我可以用 UISearchController 以编程方式复制 UIStatusBar 上的点击操作吗?【英文标题】:Can I replicate programmatically what a tap on the UIStatusBar does w/ UISearchController? 【发布时间】:2018-04-01 12:13:26 【问题描述】:我找不到将UIScrollView
滚动到顶部的方法,就像UIStatusBar
在UINavigationItem
包含UISearchController
时所做的那样。在这种情况下,滚动视图滚动到顶部包括显示搜索栏。如果我尝试对通常的嫌疑人执行此操作(调用滚动、设置内容偏移等),我似乎无法让搜索栏出现。
我可以以编程方式复制点击UIStatusBar
的功能吗?
【问题讨论】:
【参考方案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;
结果:
工作代码:
[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。
【讨论】:
太棒了,做到了!感谢演示程序。当UISearchBarController
重新出现时,会有一点点闪烁,但这可能是我们使用公共 API 所能做的最好的事情。恭喜!
我应该早点给出答案。两天前我本来打算回答你的问题,但因为闪烁而没有回答。最后,在没有收到反对票的情况下这样做。谢谢;)以上是关于我可以用 UISearchController 以编程方式复制 UIStatusBar 上的点击操作吗?的主要内容,如果未能解决你的问题,请参考以下文章
以编程方式显示 UISearchController 的搜索栏
UISearchController 以模态方式存在时的错误行为
iOS v10 或更低版本:如何以编程方式在导航栏底部添加 UISearchController
以编程方式重置 UISearchController 中的搜索查询字符串