iOS中模糊的半透明导航栏

Posted

技术标签:

【中文标题】iOS中模糊的半透明导航栏【英文标题】:Blurred translucent navigation bar in iOS 【发布时间】:2016-03-10 02:27:36 【问题描述】:

我正在尝试在我的 Swift ios 应用程序中获得这种模糊半透明的导航栏效果(图像中的第一个导航栏):

但是我做不到。我尝试了几种方法,其中一些方法如下:

setBackgroundImage, shadowImage and translucent attrs in AppDelegate (Getting the NavController from the RootViewController attr)

AppDelegate main 方法中的那些行:

UINavigationBar.appearance().translucent = true;
UINavigationBar.appearance().barTintColor = UIColor(white: 1, alpha: 0.4)

从 UIBuilder 更改属性

在 viewControllers 中设置 self.automaticallyAdjustsScrollViewInsets = trueself.edgesForExtendedLayout = UIRectEdge.None

但仍然无法使其正常工作。我在 XCode 模拟器上运行应用程序,使用 iOS 8.1 和 9.0

我做错了什么?

【问题讨论】:

【参考方案1】:

第二个导航栏已经是半透明和模糊的,只是不如第一个导航栏那么半透明。如果您打开Digital Color Meter并将鼠标悬停在您的屏幕截图上,您可以看到第二个导航栏的背景在覆盖图像的区域较暗。

this question解释了第一个导航栏比第二个导航栏更透明的原因:第一个导航栏的屏幕截图是从运行 iOS 7.0.2 的设备上截取的,而第二个导航栏的屏幕截图是取自运行 iOS 7.0.4 的设备。 Apple 在这些 iOS 版本和 iOS 7.1 之间更改了 UINavigationBar 的行为。

Appleexplains目前的半透明机制如下:

半透明条将其barTintColor 与灰色混合,然后将其与系统定义的 alpha 值组合以生成最终的背景颜色,用于将条与其覆盖的内容合成。

模糊效果的唯一description 似乎如下:

导航栏在 iOS 7 中默认是半透明的。此外,所有导航栏都应用了系统模糊。

您可以通过使用UIImage.imageWithColor: 从具有适当 alpha 值的 UIColor 为该栏制作背景图像来更改栏的透明度,但这样做会消除模糊效果。没有记录在案的方法可以更改“系统定义的 alpha 值”以增加条形的半透明度而不消除“系统模糊”。

如果您想模仿 iOS 8.1 和 9.0 上的旧半透明和模糊效果,您需要创建自己的 UINavigationBar 子类并插入一个或多个子视图,例如具有使用适当 alpha 的背景颜色的 UIView value(用于透明度)和/或 UIVisualEffectView(用于模糊效果)。

您也许可以在this question 的答案之一中找到组合视图。

相关:Blurring effect disappeared on iOS 7.1

【讨论】:

【参考方案2】:

didFinishLaunchingWithOptions 中添加以下代码:

对于目标 C

  [[UINavigationBar appearance] setTranslucent:NO];

适用于 Swift 3+/iOS 10+

UINavigationBar.appearance().isTranslucent = false

【讨论】:

【参考方案3】:

也许plist 的更改可以解决您的问题。

【讨论】:

以上是关于iOS中模糊的半透明导航栏的主要内容,如果未能解决你的问题,请参考以下文章

IOS - 内容上的半透明导航栏

iPhone:UITabBarController 内的半透明导航栏

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

实现动态内容的透明模糊导航栏

在 ios 7 中制作透明导航栏和透明标签栏。

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