【问题标题】:Why I cannot make my UITabBarController blurred?为什么我不能让我的 UITabBarController 模糊?
【发布时间】:2017-02-15 13:45:21
【问题描述】:

我有一个UITabBar,我想让它变得模糊。我写了以下代码:

import UIKit

class TabBarController:UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()
        let blur = UIBlurEffect(style: UIBlurEffectStyle.Light)
        let blurView = UIVisualEffectView(effect: blur)
        blurView.frame = self.view.bounds
        blurView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
        self.view.layer.insertSublayer(blurView, atIndex: 0)
    }

}

但不知何故最后一行抛出错误:

无法将“UIVisualEffectView”类型的值转换为预期参数 输入“CALayer”

我该如何解决这个问题?

我把最后一行改成:

self.tabBar.addSubview(blurView)

但现在整个标签栏都模糊了(即使有图标,它们也不可见)。当我将此行更改为:

self.tabBar.sendSubviewToBack(blurView)

然后标签栏可见,但不模糊。我想从这里Black background on transparent UITabBar 接受的答案中获得效果,但这里是 uitabbar,我正在使用 uitabbarcontroller...你能帮我在我的情况下应用模糊吗?

【问题讨论】:

  • 模糊还是透明?
  • @Mr.Bista 被 UIBlurEffectStyle.Light 模糊了 :)
  • 您可以添加您的故事板的图片吗?
  • @kabiroberai 我有一个包含 3 个视图的 UITabBarController,每个视图都嵌入在导航控制器中,所以我的故事板的这一部分看起来像这样:i.imgur.com/pfIpRMY.png
  • @user3766930 以及您想在UITabBarController 后面模糊哪些内容?你能发送一张带有内容的特定视图控制器的图片吗?

标签: swift uitabbarcontroller uistoryboard uitabbar


【解决方案1】:

将底部约束附加到视图底部而不是安全区域

这可能不是您的 TabBar 的问题,而是 tableView 约束。 标签栏默认是模糊的。

【讨论】:

    【解决方案2】:

    我有一个解决方案,您只需将您的 UITabBar 配置如下:

    // next code will make tabBar fully transparent
    
    tabBar.isTranslucent = true
    tabBar.backgroundImage = UIImage()
    tabBar.shadowImage = UIImage() // add this if you want remove tabBar separator
    tabBar.barTintColor = .clear 
    tabBar.backgroundColor = .black // here is your tabBar color
    tabBar.layer.backgroundColor = UIColor.clear.cgColor
    

    如果要添加模糊,请执行以下操作:

    let blurEffect = UIBlurEffect(style: .dark) // here you can change blur style
    let blurView = UIVisualEffectView(effect: blurEffect)
    blurView.frame = tabBar.bounds
    blurView.autoresizingMask = .flexibleWidth
    tabBar.insertSubview(blurView, at: 0)
    

    结果:

    【讨论】:

      【解决方案3】:

      如果我从您发布的以下评论中理解正确,您想将 UITabBar 更改为黑色但仍然模糊。

      是的,我注意到 UITabBarController 默认是模糊的,但我想用特定的样式 (.Dark) 使其模糊。

      从 iOS 7 开始执行此操作实际上变得相当容易。只需将UITabBarbarStyle 更改为.black。将以下代码放入您的UIViewControllerviewDidLoad 方法中(注意UITabBar 默认是半透明的,因此您无需再次指定)。

      tabBarController?.tabBar.barStyle = .black
      

      如果要将其设置回常规的白色barStyle,请将其更改回.default

      tabBarController?.tabBar.barStyle = .default
      

      您甚至可以在 Interface Builder 中执行此操作,方法是选择 UITabBarController 层次结构中的标签栏并将其 Style 更改为 Black

      【讨论】:

        【解决方案4】:

        为什么不直接使用TabBarController 上的 barTintColor 属性?

        self.tabBar.translucent = true
        self.tabBar.barTintColor = UIColor.blackColor()
        

        您甚至不需要继承 UITabBarController。您可以拨打任何UIViewController

        self.tabBarController?.tabBar.translucent = true
        self.tabBarController?.tabBar.barTintColor = UIColor.blackColor()
        

        【讨论】:

          【解决方案5】:

          您只需将模糊视图添加为子视图:

          self.view.addSubview(blurView)
          

          既然你只想把标签栏变蓝,而这个类是一个标签栏控制器,你可以这样做:

          self.tabBar.addSubview(blueView)
          

          你还需要更换框架:

          blurView.frame = self.tabBar.bounds
          

          【讨论】:

          • 谢谢,我尝试了第一行,它有效,不过还有一个问题 - 你说的 send to the back 是什么意思?
          • addSubView 的调用会将添加的子视图置于所有现有子视图之上。如果您确实需要将添加的子视图放在所有现有子视图的后面,那么您需要将其发送到后面。但这里似乎不需要。
          • 嗯,你知道吗,实际上当我添加第一行时:self.view.addSubview(blurView) 并运行项目 - 不仅标签栏模糊,而且......一切都模糊了(整个视图,从上到下屏幕底部)。我怎样才能只模糊下栏?
          • 您需要将模糊视图添加到标签栏,而不是 self.view
          • 整个标签栏会变模糊。如果这太多了,那么您需要找到其他方法来获得您想要的效果。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-06-20
          • 1970-01-01
          • 1970-01-01
          • 2014-08-31
          • 2017-03-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多