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 = true
和 self.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中模糊的半透明导航栏的主要内容,如果未能解决你的问题,请参考以下文章
iPhone:UITabBarController 内的半透明导航栏