如何制作一个可以覆盖导航栏的UIView?

Posted

技术标签:

【中文标题】如何制作一个可以覆盖导航栏的UIView?【英文标题】:How to make a UIView that can cover the navigation bar? 【发布时间】:2010-08-18 10:44:08 【问题描述】:

我想全屏显示UIView,但显示状态栏,其他东西,比如导航栏需要被UIView覆盖。

我该怎么做?

【问题讨论】:

【参考方案1】:

我相信他要问的是如何让 UIView 覆盖整个屏幕(有点像自定义弹出窗口)。这正是我最终来到这里的原因。所以我会提供我的解决方案。在任何地方调用这个函数。

[self.navigationController.view addSubview:yourUIView];

这里你介绍的视图覆盖了整个屏幕,不像

[self.view addSubview:yourUIView]; 

因此,导航栏被揭开。

【讨论】:

谢谢字节..它帮助了我..我试图在导航控制器的导航栏中添加视图..它不允许用户交互..但是当我按照你提到的那样做时,它可以工作正如预期的那样.. 这对我很有帮助。是否可以添加动画。就像一个滑下来的动画 @Mr.G 只是偏移yourUIView的框架,使用UIView方法+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations @Byte 感谢您的回复。我设法做到了。再次感谢:> 这适用于 ios 7 和 iOS 8。在 iOS 9 上,键盘关闭事件将从层次结构中删除视图。前任。显示警报样式的视图并触发键盘在后台关闭。【参考方案2】:

将视图作为子视图直接添加到主 UIWindow 实例。

【讨论】:

【参考方案3】:

有点难以完全理解这个问题,但我想你是在问如何在另一个视图上方显示UIView(这样带有导航控件的视图完全被第二个视图隐藏)?

UIViewController 有:

- (void)presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated

将您的第二个视图也由UIViewController 管理是明智的。例如,假设您的导航栏视图由UINavigationViewController 管理,而您要显示的视图由otherViewController 管理...

[navigationViewController presentModalViewController:otherViewController animated:YES];

【讨论】:

我有一个 UIView 视图,称为“mainUIView”,还有一个称为“subUIView”的 UIView,我希望 subUIView 填充屏幕,状态栏除外。 好的,有两个选择 - 使用 UIViewControllers 并根据需要显示/显示,或者直接将 subUIView 添加为 mainUIView 或应用程序的 UIWindow 的子视图(如下面的 Eiko 建议)。两者都可以,但在不了解您的用例的情况下,我不能说哪个更好/更合适。【参考方案4】:

我知道 OP 正在寻找一种完全覆盖导航栏的方法,但您可以暂时隐藏它,而不是覆盖它。隐藏后,您可以将视图添加为子视图并更改其框架或约束,使其占据整个屏幕。

- (void)showViewOverNavBar:(UIView *)view 

    [self.navigationController setNavigationBarHidden:YES];
    [self.view addSubview:view];

【讨论】:

以上是关于如何制作一个可以覆盖导航栏的UIView?的主要内容,如果未能解决你的问题,请参考以下文章

如何完全覆盖导航栏的后退按钮操作?

是否可以将 UIView 的顶部固定到导航栏的底部?

如何将UILabel放置在导航栏的中心

以编程方式获取导航栏的高度

如何覆盖 pushViewController 创建的导航栏的功能

添加覆盖导航栏的 UIImageView