即使资产目录中设置的图像将“渲染为”设置为“模板图像”,我标签栏中的图标也会显示在其后面的白色背景。以下是一些案例:
UITabBar
相同的图像变暗,对比度发生变化,以显示图标背后的背景
相同的图片,但使用红色背景设置为UITabBar.appearance().barTintColor = red
这是Sketch的iOS UI库中新导出的形状,使用iOS设置和所有3种尺寸导出:
我使用的最终PNG
从Pixelmator观看的PNG,显示透明度
图像在资产目录中以编程方式设置为模板模式。每个背景设置为UITabBar
s appearance()
,我不是子类UITabBarController
,我没有使用故事板,这里是我用var名称重现此问题的所有代码简化为:
// AppDelegate
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
let tabBarController = UITabBarController()
// let controllers = [...]
tabBarController.setViewControllers(controllers, animated: false)
UITabBar.appearance().tintColor = UIColor.brown
UITabBar.appearance().barTintColor = // red, green, etc
window!.rootViewController = tabBarController
window!.makeKeyAndVisible()
return true
}
这是我在该控制器中设置UITabBarItem
的地方:
// The controller with the tab icon
override init(style: UITableViewStyle) {
super.init(style: style)
let booImage = UIImage(named: "boo")?.withRenderingMode(.alwaysTemplate)
self.tabBarItem = UITabBarItem(title: "Controller", image: booImage, tag: 1)
}
除了这几行代码之外,这是一个没有其他变化的新项目。它似乎看到图像是一个模板,因为我能够为我想要的任何颜色着色,但白色背景总是存在。
根据文档,将模板化图像用作UITabBarItem
图标不需要其他步骤。任何人都知道为什么白色背景出现在UITabBarItems上?它与在模拟器中运行的事实有什么关系吗?
答案 0 :(得分:1)
无法复制。这是我在5s模拟器中运行的应用程序(横向);没有"白色背景":
以下是整个代码:
// AppDelegate.swift
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions
launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
self.window = self.window ?? UIWindow()
let tabBarController = UITabBarController()
let controllers = [ViewController()]
tabBarController.setViewControllers(controllers, animated: false)
UITabBar.appearance().tintColor = .yellow
UITabBar.appearance().barTintColor = .red
self.window!.rootViewController = tabBarController
self.window!.makeKeyAndVisible()
return true
}
}
// ViewController.swift
import UIKit
class ViewController: UIViewController {
init() {
super.init(nibName: nil, bundle: nil)
let booImage = UIImage(named: "ghost")?.withRenderingMode(.alwaysTemplate)
self.tabBarItem = UITabBarItem(title: "Controller", image: booImage, tag: 1)
self.view.backgroundColor = .white
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
答案 1 :(得分:0)
UITabBar可能有背景=白色。尝试设置标签栏的背景以清除。您可以在故事板中执行此操作。您可能还需要一些原因来扩展默认的UITabBar并在代码中更新它。