无法在 UIView 中调整 Google 地图的大小

Not being able to size Google Map in UIView

我正在使用 Google 地图 SKD,我正在尝试制作适合 UIView 的地图。首先,我添加了一个全屏 UIView,它在我的应用程序中显示了一个 PanoramaView。效果很好,这里是变量声明:

 @IBOutlet weak var streetViewer: UIView!
 @IBOutlet weak var gmapViewer: UIView!

 var panoView: GMSPanoramaView!
 var mapView: GMSMapView!

然后在 viewDiDLoad() 中创建全景图并将其添加为 streetViewer:

的子视图
 panoView = GMSPanoramaView(frame: CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height))
 panoView.delegate = self
 panoView.moveNearCoordinate(CLLocationCoordinate2D(latitude: -33.732, longitude: 150.312))
 streetViewer.addSubview(panoView)
 streetViewer.sendSubviewToBack(panoView)

现在我正在尝试对 UIView 执行相同的操作,它覆盖大约一半的屏幕并在 panoView 层上显示 mapView。我在这里创建地图,将其添加为 gmapViewer 的子视图,最后也将其添加为子视图并将其移动到 panoView:

之上
 mapView = GMSMapView(frame: CGRectMake(0, 0, gmapViewer.bounds.size.width, gmapViewer.bounds.size.height))
 mapView.delegate = self
 gmapViewer.addSubview(mapView)
 streetViewer.addSubview(gmapViewer)
 panoView.sendSubviewToBack(gmapViewer)

我已经对所有 UIView 添加了约束。我还在 gmapViewer 中添加了一些折纸动画并且一切都很好,除了没有填充 gmapViewer 的地图。我认为问题出在 mapView = GMSMapView(frame: CGRectMake(0, 0, gmapViewer.bounds.size.width, gmapViewer.bounds.size.height)) 但我无法理解什么不起作用,因为它适用于 panoView.

在将近 5 年后发布这个,因为它让我觉得这个问题仍然没有答案,我认为我改进了足够的 iOS 程序员能够回答我自己的问题,我希望这能有所帮助别人。

我的错误是我试图混合以编程方式和故事板设置的约束,但不确定为什么我不简单地设置 mapView 和框架 CGRect(gmapViewer.bounds.size.width/2, 0, gmapViewer.bounds.size.width/2, gmapViewer.bounds.size.height)

无论如何,下面的代码显示全屏 Google 街景视图,被半屏大小 Google 地图视图覆盖。

private let mapView = GMSMapView()
private let streetView = GMSPanoramaView()

override func viewDidLoad() {
    super.viewDidLoad()
    self.view.addSubview(streetView)
    self.view.addSubview(mapView)
    streetView.moveNearCoordinate(CLLocationCoordinate2D(latitude: 37.3317134, longitude: -122.0307466))
}

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    streetView.frame = CGRect(x: 0,
                              y: 0,
                              width: view.bounds.size.width,
                              height: view.bounds.size.height)
    mapView.frame = CGRect(x: view.bounds.size.width/2,
                           y: 0,
                           width: view.bounds.size.width/2,
                           height: view.bounds.size.height)
}