【问题标题】:Remove UITabBar line not working删除 UITabBar 行不起作用
【发布时间】:2018-02-02 13:00:33
【问题描述】:

我想删除 UITabBar 的分隔符。我为 UITabBar 设置了自定义背景图像。使用以下代码,分隔符位于 UITabBar 图像上方。

class myTabBarController: UITabBarController {

    override func viewDidLoad() {
                UITabBar.appearance().backgroundImage = UIImage(named: "secretTab.png")

}

我添加了以下代码,但它不仅删除了线条,还删除了自定义图像。(阴影)

    class myTabBarController: UITabBarController {

        override func viewDidLoad() {
            self.tabBar.clipsToBounds = true
            self.tabBarController?.tabBar.autoresizesSubviews = false
            UITabBar.appearance().backgroundImage = UIImage(named: "secretTab.png")
}

【问题讨论】:

标签: ios swift image uitabbar shadow


【解决方案1】:

这肯定看起来像一个错误。在 iOS 10 之前,它运行良好:设置 .backgroundImage,然后设置 UITabBar.appearance().shadowImage = nil(或空图像或透明图像)。

但是,对于 iOS 10...

如果你的背景图片比标签栏高,“阴影图片”被放置在背景图片的顶部;高 0.5 磅,可见。

如果您的背景图片高于标签栏,则“阴影图片”不再可见。

而且...如果您通过 Debug Hierarchy 比较 iOS 9 和 10 之间的结构,您可以看到“阴影图像”是不同视图的子视图。

所以...您可以摆脱它,但需要注意...

A.使用比标签栏短的背景图片。

B.剪辑到边界(但随后您会丢失背景图像的顶部)。

C.使用完全透明的背景...将.backgroundImage.shadowImage 设置为nil 或UIImage()。当然,那你需要想办法把你想要的图片作为标签栏的背景显示出来。

或者...但不推荐...

D.在viewDidAppear 上,逐步浏览tabBar 子视图,找到“阴影图像”并将其隐藏。这将起作用 - 但如果/当 Apple 更改标签栏的结构时它可能会失败(并且,我想,在技术上是“未记录的”,所以......):

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    var b = false
    for v in tabBar.subviews {
        for sv in v.subviews {
            if sv.frame.size.height == 0.5 && sv is UIImageView {
                // found it
                b = true
                sv.isHidden = true
                break
            }
        }
        if b { break }
    }

}

【讨论】:

  • 我通过更改标签栏的高度并删除该行来解决它。感谢您的帮助!
【解决方案2】:

这对我有用

override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        self.tabBar.shadowImage = nil
        var isFound = false
        for allViews in tabBar.subviews {
            for backgroundViews in allViews.subviews {
                if(backgroundViews is UIImageView)
                {
                    let imageView = backgroundViews as! UIImageView
                    if imageView.image == nil {
                        // found it
                        isFound = true
                        imageView.isHidden = true
                        break
                    }
                }

            }
            if isFound { break }
        }

    }

【讨论】:

    【解决方案3】:

    添加这个

      UITabBar.appearance().shadowImage = UIImage()
    

    【讨论】:

      【解决方案4】:

      试试这个,

      //Remove shadow image by assigning nil value.
      UITabBar.appearance().shadowImage = nil
      
      // or 
      
      // Assing UIImage instance without image reference
      UITabBar.appearance().shadowImage = UIImage()
      


      这是shadowImage 的苹果指南。

      @available(iOS 6.0, *)
      open var shadowImage: UIImage?
      

      默认为零。当非零时,显示自定义阴影图像而不是 默认阴影图像。对于要显示的自定义阴影,自定义 背景图像也必须用 -setBackgroundImage 设置:(如果 使用默认背景图像,默认阴影图像将是 使用)。

      【讨论】:

        【解决方案5】:

        我通过将背景图像高度调整为 49pt 解决了类似的问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-10-31
          • 2011-05-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-23
          相关资源
          最近更新 更多