添加覆盖导航栏的 UIImageView

Posted

技术标签:

【中文标题】添加覆盖导航栏的 UIImageView【英文标题】:add UIImageView that covers navigation bar 【发布时间】:2012-01-15 00:06:10 【问题描述】:

我想我在这里遗漏了一些简单的东西。我需要创建一个半透明的 UIImageView 覆盖整个屏幕,包括导航工具栏。我该怎么做?

这就是我想要做的......

【问题讨论】:

【参考方案1】:

这是一个可能的解决方案:

UIImage *image=[UIImage imageNamed:@"whatever.png"];
UIImageView *overlay=[[UIImageView alloc] initWithImage:image];
overlay.alpha=0.5;
[[[[UIApplication sharedApplication] delegate] window] addSubview:overlay];

编辑:

您可能不会为叠加层设置 Alpha 值,而是使用具有嵌入透明度级别的透明 PNG。不过,这是有可能的。 不使用 ARC 时,您应该[overlay release]

【讨论】:

Default.png 对于像这样的示例来说是一个有点奇怪的文件。最后一行不是必需的,addSubview 将新的子视图放在所有其他子视图的顶部。 我没试过,但我猜我无法检测到旋转。 @Eric,此代码不会阻止您检测旋转,也不会帮助您:由您来检测当前界面/设备旋转并相应地选择和放置覆盖图像。跨度> @Daan,鉴于原始问题的经验水平,我尝试提供一个紧凑的示例,该示例在放入 XCode 项目时可能会起作用。你的 cmets 是有效的,但你当然是有经验的。 经验与提供一个好例子无关。 Default.png 是一个错误的名称,因为它曾经是为应用程序图标文件保留的名称。添加诸如[[[[UIApplication sharedApplication] delegate] window] bringSubviewToFront:overlay]; 之类的多余代码不会增加价值,而只是意味着用户从现在开始可能会在他们的项目中包含多余的代码,因为有人建议了它并且它起作用了。【参考方案2】:

要稍微集中一下上面的答案,您只需要清楚视图如何剪辑到他们“拥有”的设备屏幕的哪些部分。

关键是在导航视图中,导航栏本身不是[myController view] 的一部分 - 您的视图控制器的视图是栏下方的所有内容,您在该视图中执行的任何操作都会剪辑到该栏下方的矩形。

但是,该栏是您的[myAppDelegate window] 的一部分。窗口本质上是设备的整个屏幕,而视图是负责管理其特定边界的子部分。因此,调用[[myAppDelegate window] addSubView:] 将显示在条形上方,而[[myViewController view] addSubView:] 则不会。

【讨论】:

以上是关于添加覆盖导航栏的 UIImageView的主要内容,如果未能解决你的问题,请参考以下文章

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

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

react-bootstrap - 导航栏的自定义容器类?

如何将 UIImageView 添加到导航栏的右侧?

将右栏按钮添加到导航栏的问题

Android开发之Navigationdrawer导航抽屉功能的实现(源码分享)