如何在使用iOS 13黑暗模式时使UITabBar不透明?

时间:2019-10-01 12:16:33

标签: ios background-color uitabbar ios13 ios-darkmode

当我设置UITabBar的背景色时,iOS默认会自动变亮该颜色,因为默认的UITabBar是半透明的。

但是我想使用{strong>不透明的UITabBar。在iOS 12及以下版本中,我通过设置所需颜色的背景图片来解决此问题:

// Create an image from a given color using a custom extension
[[UITabBar appearance] setBackgroundImage:[UIImage colorImageWithColor:[UIColor redColor]]];

这很好。但是,我想在iOS 13中使用新的暗模式。显然,当使用彩色背景图像而不是背景颜色时,这无法完成。取而代之的是,如果不手动对外观更改做出反应以切换到另一张彩色图像。

如果可以告诉iOS不要绘制半透明的UITabBar,则使用命名颜色会更好。


如果我尝试禁用半透明效果,UITabBar会变成全白色,而不是指定的颜色。

[[UITabBar appearance] setTranslucent:false];

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

我设法通过使用自定义UITabBar子类解决了问题。

  • 应用启动时,通过使用动态颜色MyDynamicTabBarBG创建动态图像,将其设置为非半透明背景
  • 使用traitCollectionDidChange检测到应用程序处于活动状态时在正常模式和黑暗模式之间切换。通过创建新图像,可以简单地重新应用动态颜色。

代码:

@implementation MCTabBar

- (void)awakeFromNib {
    [super awakeFromNib];

    // Create a color image from a given color using a custom extension
    [self setBackgroundImage:[UIImage colorImageWithColor:[UIColor colorNamed:@"MyDynamicTabBarBG"]]];
}

- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
    [self setBackgroundImage:[UIImage colorImageWithColor:[UIColor colorNamed:@"MyDynamicTabBarBG"]]];
}

@end

这可行,但是很hacky。 真的没有更优雅的解决方案了吗?