我想删除UITabBar的分隔符。我为UITabBar设置了自定义背景图片。使用以下代码,分隔符位于UITabBar图像上方。
To
我添加了以下代码,但它不仅删除了行,还删除了自定义图像。(阴影)
ColorAnimation
答案 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解决了类似的问题。