我想删除 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 10 之前,它工作得很好:设置 .backgroundImage
,然后设置 UITabBar.appearance().shadowImage = nil
(或空图像或透明图像)。
但是,对于 iOS 10...
如果您的背景图像比标签栏高,则“阴影图像”将放置在背景图像的顶部;高度为 0.5 点,并且它将可见。
如果您的背景图像不高于标签栏,则“阴影图像”将不再可见。
而且......如果您通过调试层次结构比较 iOS 9 和 10 之间的结构,您可以看到“阴影图像”是不同 View 的 subview 。
所以......你可以摆脱它,但有警告......
A.使用比标签栏短的背景图像。
B.剪辑到边界(但随后您会丢失背景图像的顶部)。
C.使用完全透明的背景...将 .backgroundImage
和 .shadowImage
设置为 nil 或 UIImage()
。当然,那么你需要找到一些其他方式来显示你想要的图像作为标签栏的背景。
或者...但不推荐...
D.在 viewDidAppear
上,单步执行 tabBar subview ,找到“阴影图像”并将其隐藏。这会起作用 - 但如果/当苹果改变标签栏的结构时它可能会失败(而且,我想,技术上是“未记录的”,所以......):
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 }
}
}
关于ios - 删除 UITabBar 行不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45865103/