在整个应用程序中添加带有搜索栏的半透明背景视图控制器

Posted

技术标签:

【中文标题】在整个应用程序中添加带有搜索栏的半透明背景视图控制器【英文标题】:Add semi-transparant background viewcontroller with search bar throughout app 【发布时间】:2016-01-05 16:13:29 【问题描述】:

在添加搜索栏 ViewController 时需要帮助,它的 SearchBar 将在 NaviagationBar 中,带有后退按钮(我实现了导航搜索 - self.navigationItem.titleView = searchBarView),但在它有搜索之前我想在后台显示以前的 ViewController就像我在 android 中实现的那样,具有半透明的黑色:

我可以将半透明的 ViewController 添加到当前的 ViewController 中:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
vc.view.backgroundColor = [UIColor clearColor];
[vc setTransitioningDelegate:transitionController];
vc.modalPresentationStyle= UIModalPresentationCurrentContext;
[self presentViewController:vc animated:YES completion:nil];

但是它在做什么,它在没有 NavigationBar 的情况下以透明方式打开 SecondViewController,FirstViewController 有 NavigationBar

当 SecondViewController 打开时,它应该在 NavigationBar 中有 SearchBar,并且它不应该像我在 Android 中实现的那样是透明的。 将有 n 个 ViewController 将添加与具有 NavigationBar 和后退按钮的 Overlay Controller 相同的控制器。 请帮忙。

【问题讨论】:

你看过 addng blur view 吗? 不,半透明,但 NavigationBar 不透明 是否有理由不将 navBar 功能添加到要在后台捕获其视图的 viewController?否则,您可以拍摄最后一个 VC 的图像快照并将其用作导航栏控制器的背景。 @Alex 有没有办法在没有以前 ViewController 的 NavigationBar 的情况下截屏 是的,我从来没有这样做过,但这是一个可能的解决方案。在我看到的解决方案中,您最终会使用一些 CGGraphics:***.com/questions/10365735/… 【参考方案1】:

我找到了一些解决方案,其中涉及拍摄视图快照并将它们添加到您的导航栏控制器。

来自苹果: https://developer.apple.com/library/ios/qa/qa1817/_index.html

其他有趣的选项: iOS iPhone is it possible to clone UIView and have it draw itself to two UIViews?

【讨论】:

感谢回复,但此案例在横向模式下会失败。假设第一个 ViewController 处于纵向模式,如果我截取纵向的屏幕截图并将其设置为 searchcontroller 的背景,那么在横向模式下,我在纵向中传递的图像看起来与横向不同,它将被拉伸。 您可以对视图应用变换以匹配旋转吗?【参考方案2】:

在您的代码 sn-p 中,您只需创建新的 SecondViewController 并将其呈现为模态。它没有导航栏出现,因为您在没有导航控制器的情况下创建它。 如果您想将 SecondViewController 保持在与以前的 ViewController 相同的导航堆栈中,带有导航栏和默认的后退按钮,您应该调用:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
[self presentViewController:vc animated:YES completion:nil];
[self.navigationController pushViewController:vc animated:YES];

要使 SecondViewController 像半透明一样,请对之前的视图控制器进行截图,将此图像传递给 SecondViewController 并将其用作背景。您可以将此图像应用到您的 SecondViewController 视图上的其他 ImageView 或只是调用:

self.view.backgroundColor = [UIColor colorWithPatternImage:self.backgroundImage];

【讨论】:

以上是关于在整个应用程序中添加带有搜索栏的半透明背景视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

创建一个像 UINavigationBar 这样的半透明视图

推送视图控制器中的半透明导航栏覆盖?

tableView 作为半透明视图中的子视图

带有透明/模糊导航栏的 iOS 7 视图控制器布局问题

iOS 11:带有不透明导航栏的导航控制器内带有滚动视图的弹出视图控制器在转换期间导致奇怪的内容动画

iPhone - 应用程序上方的半透明黑色状态栏