Ios UISearchController与使用Swift的谷歌地图
我正在尝试创建一个屏幕,其中将有一个覆盖整个屏幕的谷歌地图和顶部显示所选地址(标记指向的位置)的按钮。 我希望当用户点击该按钮时,会显示一个UISearchBar,在那里他可以使用GooglePlacesAPI搜索位置 我一直在遵循以下教程: 不幸的是,在我的情况下,搜索栏没有出现(尽管按下按钮时背景变暗) 下面是我按下按钮之前和之后的一些屏幕截图 这是我的视图控制器的代码Ios UISearchController与使用Swift的谷歌地图,ios,swift,google-maps,uisearchbar,uisearchcontroller,Ios,Swift,Google Maps,Uisearchbar,Uisearchcontroller,我正在尝试创建一个屏幕,其中将有一个覆盖整个屏幕的谷歌地图和顶部显示所选地址(标记指向的位置)的按钮。 我希望当用户点击该按钮时,会显示一个UISearchBar,在那里他可以使用GooglePlacesAPI搜索位置 我一直在遵循以下教程: 不幸的是,在我的情况下,搜索栏没有出现(尽管按下按钮时背景变暗) 下面是我按下按钮之前和之后的一些屏幕截图 这是我的视图控制器的代码 class ChooseLocationViewController: UIViewController, GMSM
class ChooseLocationViewController: UIViewController, GMSMapViewDelegate, UISearchBarDelegate, UISearchControllerDelegate {
let geocoder = GMSGeocoder()
var mapView: GMSMapView = GMSMapView.mapWithFrame(CGRectZero, camera:GMSCameraPosition.cameraWithLatitude(51.515339, longitude: -0.141838, zoom: 16))
var addressButton: UIButton = UIButton()
let locationManager = CLLocationManager()
override func viewDidLoad() {
super.viewDidLoad()
mapView.delegate = self
let marker = UIImageView(frame: CGRect(x: 20, y: 20, width: 50, height: 50))
marker.image = UIImage(named: "default-marker")
marker.center.x = self.view.center.x
marker.center.y = self.view.center.y - (self.navigationController?.navigationBar.frame.size.height)!
addressButton = UIButton(frame: CGRect(x: 20, y: 20, width: self.view.frame.size.width - 25, height: 47))
addressButton.center.x = self.view.center.x
addressButton.backgroundColor = UIColor(red: 248/255, green: 248/255, blue: 248/255, alpha: 1.0)
addressButton.layer.borderColor = UIColor(red: 178/255, green: 178/255, blue: 178/255, alpha: 1.0).CGColor
addressButton.layer.borderWidth = 1.0
addressButton.layer.cornerRadius = 5
addressButton.setTitleColor(UIColor(red: 68/255, green: 68/255, blue: 68/255, alpha: 1.0), forState: .Normal)
addressButton.titleLabel?.font = UIFont.systemFontOfSize(13)
addressButton.addTarget(self, action: "showLocationSearch", forControlEvents: .TouchDown)
self.view = mapView
self.view.addSubview(marker)
self.view.addSubview(addressButton)
}
func showLocationSearch() {
let searchController = UISearchController(searchResultsController: nil)
searchController.delegate = self
searchController.searchBar.delegate = self
self.presentViewController(searchController, animated: true, completion: nil)
}
func willPresentSearchController(searchController: UISearchController) {
self.navigationController?.extendedLayoutIncludesOpaqueBars = true
}
func willDismissSearchController(searchController: UISearchController) {
self.navigationController?.extendedLayoutIncludesOpaqueBars = false
}
func mapView(mapView: GMSMapView, idleAtCameraPosition position: GMSCameraPosition) {
let coordinate = position.target
geocoder.reverseGeocodeCoordinate(coordinate) { response, error in
if let address = response?.firstResult() {
if let lines = address.lines {
if (lines.count > 0) {
self.addressButton.setTitle(lines[0], forState: .Normal)
}
}
}
}
}
}
另外,我之所以要更改ExtendedLayoutCludeSopaqueBars,是因为我注意到在我有搜索栏的其他视图中,这是正确显示它所必需的。在这种情况下,无论我是否这样做,我都会得到完全相同的行为(搜索栏没有显示)
我做错了什么?有人有类似的问题吗?可能会发布源文件的完整代码,以查看是否有其他视图与搜索控制器发生冲突?@Shubhank这是完整代码。这里没有显示的唯一附加内容是我在interface builder中包含的导航栏(导航项)。但我不认为这会影响任何事情,因为正如我所提到的,我有其他的视图,包括搜索控制器和导航栏,它工作得很好。我认为问题是因为谷歌地图视图,但我不知道为什么或如何解决它!