我正试图在我的Swift iOS应用程序中获得这种模糊 - 半透明的导航栏效果(图像中的第一个导航栏):
但我不能完成这件事.我尝试了几种方法,其中一些方法如下:
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更改属性
设置self.automaticallyAdjustsScrollViewInsets = true
和self.edgesForExtendedLayout = UIRectEdge.None
在viewControllers中
但仍然无法让这个工作.我正在使用iOS 8.1和9.0在XCode模拟器上运行该应用程序
我做错了什么?
在didFinishLaunchingWithOptions中添加以下代码:
对于Objective C
[[UINavigationBar appearance] setTranslucent:NO];
适用于Swift 3 +/iOS 10+
UINavigationBar.appearance().isTranslucent = false
第二个导航栏已经是半透明和模糊的,只是不如第一个导航栏半透明。如果打开Digital Color Meter,然后将鼠标悬停在屏幕截图上,则可以看到第二个导航栏的背景在覆盖图像的区域更暗。
之所以第一导航栏是更半透明比第二导航棒中说明了这个问题:所述第一杆的屏幕截图是从运行iOS 7.0.2一个装置拍摄,而第二栏的屏幕截图是从设备拍摄运行iOS 7.0.4。苹果在这些版本的iOS之间以及在iOS 7.1中再次更改了UINavigationBar的行为。
苹果对当前的半透明机制进行了如下解释:
半透明的条将其
barTintColor
与灰色混合,然后再将其与系统定义的alpha值组合,以产生最终的背景色,该背景色用于将条与上层内容混合在一起。
对模糊效果的唯一描述似乎如下:
默认情况下,iOS 7中的导航栏是半透明的。此外,所有导航栏都有系统模糊。
您可以通过使用UIImage.imageWithColor:
具有适当的Alpha值的UIColor为条形制作背景图像来更改条形的透明度,但是这样做会消除模糊效果。没有记录的方法来更改“系统定义的Alpha值”以增加条形的半透明性而没有消除“系统模糊”。
如果要在iOS 8.1和9.0上模仿旧的半透明和模糊效果,则需要制作自己的UINavigationBar子类,并插入一个或多个子视图,例如UIView,其背景色使用适当的alpha值(对于透明度)和/或UIVisualEffectView(用于模糊效果)。
您可能可以在此问题的答案之一中找到组合视图。
相关: 模糊效果在iOS 7.1上消失了