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

GMSAutocompleteViewController取消按钮无法正常显示问题求助

解决GMSAutocompleteViewController取消按钮显示异常问题

嘿,我之前也碰到过类似的情况!你用Google Places的全屏自动完成控件时,取消按钮只有点击特定区域才显示,大概率是导航栏配置或者SDK的小细节没处理好,这里给你几个亲测有效的解决办法:

1. 手动添加取消按钮兜底

有时候默认的取消按钮会因为导航栏样式冲突不显示,咱们可以手动给GMSAutocompleteViewController的导航栏加一个取消按钮:

let autocompleteController = GMSAutocompleteViewController()
autocompleteController.delegate = self

// 手动创建取消按钮并绑定关闭动作
let cancelBtn = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(closeAutocompleteVC))
autocompleteController.navigationItem.leftBarButtonItem = cancelBtn

present(autocompleteController, animated: true, completion: nil)

然后在当前控制器里实现对应的关闭方法:

@objc private func closeAutocompleteVC() {
    dismiss(animated: true, completion: nil)
}

2. 检查全局导航栏样式

如果你的项目里有全局修改导航栏的代码(比如隐藏导航栏、设置透明、修改文字样式),可能会影响GMSAutocompleteViewController的导航栏显示。可以在弹出控件前临时恢复导航栏的默认状态,弹出后再还原:

// 先保存当前导航栏的状态
let originalIsHidden = navigationController?.navigationBar.isHidden
let originalBarTintColor = navigationController?.navigationBar.barTintColor

// 临时设置导航栏为默认可见状态
navigationController?.navigationBar.isHidden = false
navigationController?.navigationBar.barTintColor = .systemBackground

let autocompleteController = GMSAutocompleteViewController()
autocompleteController.delegate = self

present(autocompleteController, animated: true) {
    // 弹窗消失后恢复原来的导航栏状态
    self.navigationController?.navigationBar.isHidden = originalIsHidden ?? false
    self.navigationController?.navigationBar.barTintColor = originalBarTintColor
}

3. 升级Places SDK版本

如果用的是比较老的SDK版本,可能存在这个UI显示的小bug,建议升级到最新的稳定版本,官方通常会修复这类基础UI问题。

另外也可以检查下你实现的delegate方法,确保autocompleteViewControllerDidCancel(_:)里只做关闭弹窗的操作,不要额外修改导航栏的配置,避免干扰默认的按钮显示。

内容的提问来源于stack exchange,提问作者Lenin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:19:25