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
相关产品推荐
相关产品推荐

