UPDATED.
How to do it programatically that's still a mystery, but if I find a solution I'll place it here.
I tested this and it works.
I subclassed UITabBarController.
In viewDidLoad, I set the tabBarItems (here with system icons).
They are no more dimmed when unselected:
class TabBarViewController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
if let bookViewController = self.viewControllers?[0] {
let customTabBarItem = UITabBarItem(title: "Pencil", image: UIImage(systemName: "pencil.tip.crop.circle")?.withRenderingMode(UIImage.RenderingMode.alwaysOriginal), selectedImage: UIImage(systemName: "pencil.tip.crop.circle"))
bookViewController.tabBarItem = customTabBarItem
}
if let bookViewController = self.viewControllers?[1] {
let customTabBarItem = UITabBarItem(title: "Share", image: UIImage(systemName: "shareplay.slash")?.withRenderingMode(UIImage.RenderingMode.alwaysOriginal), selectedImage: UIImage(systemName: "shareplay.slash"))
bookViewController.tabBarItem = customTabBarItem
}
if let bookViewController = self.viewControllers?[2] {
let customTabBarItem = UITabBarItem(title: "Books", image: UIImage(systemName: "book")?.withRenderingMode(UIImage.RenderingMode.alwaysOriginal), selectedImage: UIImage(systemName: "book"))
bookViewController.tabBarItem = customTabBarItem
}
// Nothing for item 3, on purpose to see difference
}
}
Here is the TabBar at launch:

Note the difference for Person tab.
Here is IB definition in this example:
