iOS中模糊的半透明导航栏

时间:2015-12-05 02:13:34

标签: ios swift cocoa navigation

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

Translucent Navigation Bar

但我无法完成这项工作。我尝试了几种方法,其中一些方法如下:

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

AppDelegate主要方法中的那些行:

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

从UIBuilder更改属性

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

但仍然无法使其发挥作用。我使用iOS 8.1和9.0

在XCode模拟器上运行应用程序

我做错了什么?

3 个答案:

答案 0 :(得分:6)

didFinishLaunchingWithOptions中添加以下代码:

目标C

  [[UINavigationBar appearance] setTranslucent:NO];

适用于Swift 3 + / iOS 10 +

UINavigationBar.appearance().isTranslucent = false

答案 1 :(得分:5)

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

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

Apple explains目前的半透明机制如下:

  

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

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

  

默认情况下,iOS 7中的导航栏是半透明的。此外,系统模糊应用于所有导航栏。

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

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

您可以在this question的答案之一中找到合并后的视图。

相关:Blurring effect disappeared on iOS 7.1

答案 2 :(得分:0)

plist

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