删除UITabBar行不起作用

时间:2017-08-24 15:08:17

标签: ios swift image uitabbar shadow

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

To

enter image description here

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

ColorAnimation

enter image description here

5 个答案:

答案 0 :(得分:2)

这当然看起来像个错误。在iOS 10之前,它工作正常:设置.backgroundImage然后设置UITabBar.appearance().shadowImage = nil(或空图像或透明图像)。

使用iOS 10,但是......

IF 您的背景图片比标签栏高,“阴影图片”会放在背景图片的顶部;高0.5磅,可见。

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

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

所以...你可以摆脱它,但有警告......

一个。使用比标签栏短的背景图片。

B中。剪辑到边界(但是你会丢失背景图像的顶部)。

℃。使用完全透明的背景...将.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 }
    }

}

答案 1 :(得分:1)

这对我有用

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 }
        }

    }

答案 2 :(得分:0)

添加此

  UITabBar.appearance().shadowImage = UIImage()

答案 3 :(得分:0)

试试这个,

//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设置背景图像:(如果是   使用默认背景图像,默认阴影图像将是   使用)。

答案 4 :(得分:-1)

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