【发布时间】:2020-03-16 06:16:31
【问题描述】:
Xcode 11.3.1、iOS 13
如果应用程序中存在特定条件,我正在尝试更改所有视图控制器上导航栏的颜色。使用 AppDelegate 中的委托函数,使用最初设置全局颜色的相同代码似乎是合乎逻辑的。
这是我的代码:
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
var myColor : UIColor?
let themeColorUS = UIColor(red: 0.991, green: 0.621, blue: 0.022, alpha: 1.00)
let themeColorCanada = UIColor(red: 0.001, green: 0.686, blue: 0.000, alpha: 1.00)
let themeColorGeneral = UIColor(red: 0.000, green: 0.954, blue: 0.969, alpha: 1.00)
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
UserDefaults.standard.setValue(false, forKey: "_UIConstraintBasedLayoutLogUnsatisfiable")
setBarColors(issuingFlag: "General")
return true
}
...
func setBarColors(issuingFlag:String) {
if issuingFlag == "US" {
myColor = themeColorUS
}else if issuingFlag == "Canada"{
myColor = themeColorCanada
}else{
myColor = .magenta
}
print("issuingFlag == \(issuingFlag)")
if #available(iOS 13.0, *) {
let appearance = UINavigationBarAppearance()
appearance.backgroundColor = myColor
appearance.titleTextAttributes = [.foregroundColor: UIColor.black]
appearance.largeTitleTextAttributes = [.foregroundColor: UIColor.black]
UINavigationBar.appearance().tintColor = .black
UINavigationBar.appearance().standardAppearance = appearance
UINavigationBar.appearance().compactAppearance = appearance
UINavigationBar.appearance().scrollEdgeAppearance = appearance
} else {
UINavigationBar.appearance().tintColor = .black
UINavigationBar.appearance().barTintColor = myColor
UINavigationBar.appearance().isTranslucent = false
}
}
除了在应用程序打开时对setBarColors() 的初始调用(工作正常)之外,我还像这样从应用程序内的 viewController 调用它,这对导航栏没有任何作用,即使该函数正在接收适当的参数中的数据:
if detailFlag.issuedBy == "Canada"{
appDelegate.setBarColors(issuingFlag: "Canada")
}else if detailFlag.issuedBy == "US"{
appDelegate.setBarColors(issuingFlag: "US")
}
有人可以帮我解释一下为什么该函数没有切换navBar 颜色吗?
TIA!
【问题讨论】:
标签: ios swift uinavigationbar appdelegate