iOS模拟器使用模板渲染模式

时间:2017-12-13 00:42:58

标签: ios swift xcode uitabbar uitabbaritem

即使资产目录中设置的图像将“渲染为”设置为“模板图像”,我标签栏中的图标也会显示在其后面的白色背景。以下是一些案例:

UITabBar

上根本没有设置背景

With no background setting

相同的图像变暗,对比度发生变化,以显示图标背后的背景

With no background setting, image enhanced

相同的图片,但使用红色背景设置为UITabBar.appearance().barTintColor = red

enter image description here

这是Sketch的iOS UI库中新导出的形状,使用iOS设置和所有3种尺寸导出:

With a green background

我使用的最终PNG

The final png

从Pixelmator观看的PNG,显示透明度

A screenshot of the icon in Pixelmator

图像在资产目录中以编程方式设置为模板模式。每个背景设置为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上?它与在模拟器中运行的事实有什么关系吗?

2 个答案:

答案 0 :(得分:1)

无法复制。这是我在5s模拟器中运行的应用程序(横向);没有"白色背景":

enter image description here

以下是整个代码:

// 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并在代码中更新它。

Storyboard Color