UITabBar / UITabBarItem和iOS 13的黑暗模式

时间:2019-07-12 17:09:37

标签: uitabbaritem ios13 ios-darkmode

在我们的应用程序中,我们以编程方式动态使用自定义UITabBarItem(请参见下文)。我们使用ImageAssets获得正确的暗/亮图像。但这并不能100%地起作用:如果我们重新启动应用程序,就可以了。如果iOS切换为暗模式且应用程序正在运行,则图像将保持亮模式。想知道这是一个错误还是我现在可以使它工作...

UIImage * mImage = [UIImage imageNamed:@“ tabBar1”];     UIImage * mImageSel = [UIImage imageNamed:@“ tabBar1Sel”];

mImage = [mImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
mImageSel = [mImageSel imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

self.tabBarItem = [[UITabBarItem alloc] initWithTitle:nil image:mImage selectedImage:mImageSel];

UIEdgeInsets titleInsets = UIEdgeInsetsMake(-6, 0.0, -6.0, 0.0);
self.tabBarItem.imageInsets = titleInsets;

没有显示错误消息...

1 个答案:

答案 0 :(得分:3)

以编程方式创建的UITabBarItems会遇到相同的问题。

我们尝试在UIViewController.traitCollectionDidChange(:)中重新创建TabBarItem,问题仍然存在。好像是苹果的虫子。值得注意的是,该问题仅对我们而言适用于SelectedImage。默认的未选择状态似乎尊重UIUserInterfaceStyle的更改(暗模式)。

我们找到了一个临时解决方案:如果您将相同的selectedImage重新分配给UIViewController.traitCollectionDidChange(:)中的myViewController.tabBarItem,则会解决此问题。

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
  super.traitCollectionDidChange(previousTraitCollection)
  self.tabBarItem.selectedImage = mySelectedImage //same image asset that was used in the initializer
}

不确定为什么可以解决它,但对我们有用。