You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift修改GMSAutocompleteViewController导航栏颜色问题求助

解决GMSAutocompleteViewController导航栏颜色修改无效的问题

我之前也踩过这个坑!直接通过autocompleteController.navigationController?.navigationBar设置颜色之所以无效,是因为Google的这个控制器内部的导航控制器是懒加载的——你在present它之前去访问navigationController属性,它还没被初始化呢,自然设置不会生效。

给你两个靠谱的解决方案:

方案一:用UIAppearance针对性设置(推荐)

在present GMSAutocompleteViewController之前,用UIAppearance API专门给这个控制器的导航栏设置样式,这样内部导航控制器创建时会自动应用这些样式:

// 先配置针对GMSAutocompleteViewController的导航栏样式
UINavigationBar.appearance(whenContainedInInstancesOf: [GMSAutocompleteViewController.self]).barTintColor = UIColor.blue
UINavigationBar.appearance(whenContainedInInstancesOf: [GMSAutocompleteViewController.self]).tintColor = UIColor.blue
// 关键!设置导航栏不透明,否则barTintColor可能显示不出来
UINavigationBar.appearance(whenContainedInInstancesOf: [GMSAutocompleteViewController.self]).isTranslucent = false

// 然后再初始化并present控制器
let autocompleteController = GMSAutocompleteViewController()
autocompleteController.primaryTextHighlightColor = UIColor.jnlyDarkGrey
// 其他配置...
present(autocompleteController, animated: true)

方案二:通过代理/重写生命周期方法修改

如果你不想用全局样式,可以利用控制器的生命周期方法或者代理,在导航控制器初始化完成后再修改:

// 方法1:扩展GMSAutocompleteViewController重写viewDidAppear
extension GMSAutocompleteViewController {
    open override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        navigationController?.navigationBar.barTintColor = .blue
        navigationController?.navigationBar.tintColor = .blue
        navigationController?.navigationBar.isTranslucent = false
    }
}

// 方法2:利用代理(可选)
autocompleteController.delegate = self

// 实现代理方法,在控制器即将显示时设置
func autocompleteViewController(_ viewController: GMSAutocompleteViewController, didAutocompleteWith place: GMSPlace) {
    // 这里也可以设置,但viewDidAppear时机更稳妥
}

不过方案二可能会出现短暂的白色导航栏闪屏情况,所以方案一的UIAppearance方法体验更顺畅。

另外还要注意:如果你的项目有全局导航栏样式配置,要确保没有覆盖掉针对GMSAutocompleteViewController的特殊设置哦。

内容的提问来源于stack exchange,提问作者N. Beer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:20:56