在用户将应用程序的外观从亮模式更改为暗模式后,我试图重新加载选项卡栏,反之亦然。我可以更新应用程序中除选项卡栏以外的所有内容。我不想强迫用户关闭应用程序。
答案 0 :(得分:3)
如果您尝试查看有关UIAppearance
的{{3}},则会看到注释:
iOS会在视图进入窗口时应用外观更改,但不会 更改窗口中已有视图的外观。 要更改 当前在窗口中的视图的外观,请删除该视图 从视图层次结构中放回去。
基于此注释,您可以通过删除外观并通过一些技巧来更改外观,并在对外观进行更改后立即设置层次结构中最顶层的视图:
guard let currentView = (UIApplication.shared.delegate as? AppDelegate)?.window?.rootViewController?.view,
let superview = currentView.superview else { return }
UITabBar.appearance().tintColor = .green
currentView.removeFromSuperview()
superview.addSubview(currentView)
答案 1 :(得分:1)
在iOS 13中,您可以覆盖UITabBarController中的import { Directive, ElementRef, ViewContainerRef } from '@angular/core';
@Directive({
selector: '[OnChangeBlink]'
})
export class OnChangeBlinkDirective{
readonly green_color:string = '#27AE60'
readonly white_color:string = '#FFFFFF'
element_ref:ElementRef;
doBlink(color: string):void {
if(color){
this.element_ref.nativeElement.style.backgroundColor = this.green_color;
setTimeout(() => {
this.element_ref.nativeElement.style.backgroundColor = this.white_color;
}, 500);
}
}
constructor(elRef: ElementRef, private vcRef: ViewContainerRef) {
this.element_ref = elRef;
const component = vcRef['_data']['componentView']['component'];
if (component.hasOwnProperty('ngDoCheck')){//never happens
console.log(component['ngDoCheck']);
}
}
}
进行更改。参见documentation。
示例:
traitCollectionDidChange(_:)
答案 2 :(得分:1)
我想说这里没有的答案是正确的(在撰写本文时)。为视图指定颜色时,您只需确保设置了暗模式颜色,系统会在用户更改模式时自动更新。
为此有两个主要选项:
tabBar.backgroundColor = UIColor(named: "tabBarBackground")
tabBar.backgroundColor = UIColor.clear.withDarkModeColor(.black)
答案 3 :(得分:0)
您可以使用tabBar.backgroundColor
属性设置tabBar的颜色:
self?.tabBar.backgroundColor
请确保您要更新主线程上的背景色。
DispatchQueue.main.async { [weak self] in
self?.tabBar.backgroundColor = newAppearanceColor
}