当我设置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];
如何解决此问题?
答案 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。 真的没有更优雅的解决方案了吗?