0

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

但我想使用一个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];

如何解决这个问题?

4

1 回答 1

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。真的没有更优雅的解决方案了吗?

于 2019-10-01T13:27:51.270 回答