删除 UITabBar 行不起作用

Remove UITabBar line not working

我想去掉 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")
}

添加这个

  UITabBar.appearance().shadowImage = UIImage()

试试这个,

//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?

Default is nil. When non-nil, a custom shadow image to show instead of the default shadow image. For a custom shadow to be shown, a custom background image must also be set with -setBackgroundImage: (if the default background image is used, the default shadow image will be used).

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

iOS10,但是...

如果 你的背景图片比标签栏高,"shadow image" 会放在背景的顶部图片;高 0.5 磅, 可见。

如果您的背景图片 高于标签栏,"shadow image" 将不再可见。

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

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

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

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

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

或者……但不推荐……

D.在 viewDidAppear 上,遍历 tabBar 子视图,找到 "shadow image" 并将其隐藏。这会起作用 - 但如果/当 Apple 更改选项卡栏的结构时它可能会失败(而且,我想,技术上是 "non-documented",所以......):

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

}

这对我有用

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

    }

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