5

有人知道如何从 GMSMapView 实例中获取 myLocationButton 的实例吗?或者改变默认位置的方法?我只需要将它向上移动一些像素。

4

4 回答 4

15

根据此问题 5864 的问题跟踪器:错误:GMSMapView 填充似乎不适用于 AutoLayout,有一个更简单的解决方法:

- (void)viewDidAppear:(BOOL)animated {
  // This padding will be observed by the mapView
  _mapView.padding = UIEdgeInsetsMake(64, 0, 64, 0);
}
于 2013-10-06T12:31:24.073 回答
4

Raspu 的解决方案移动了包括指南针在内的整个 GMSUISettingsView。

我找到了一个只移动位置按钮的解决方案:

for (UIView *object in mapView_.subviews) {
    if([[[object class] description] isEqualToString:@"GMSUISettingsView"] )
    {
        for(UIView *view in object.subviews) {
            if([[[view class] description] isEqualToString:@"UIButton"] ) {
                CGRect frame = view.frame;
                frame.origin.y -= 75;
                view.frame = frame;
            }
        }
        /*        
        CGRect frame = object.frame;
        frame.origin.y += 75;
        object.frame = frame;
        */
    }
};

如果取消注释三行,则仅移动指南针(由于某种原因,我无法移动 GMSCompassButton 视图)。

于 2013-07-26T10:59:40.837 回答
3

Swift 2.3:仅移动位置按钮的解决方案。我正在使用 pod 'GoogleMaps'、'~> 2.1'。

for object in mapView.subviews {
    if object.theClassName == "GMSUISettingsView" {
        for view in object.subviews {
            if view.theClassName == "GMSx_QTMButton" {
              var frame = view.frame
              frame.origin.y = frame.origin.y - 110px // Move the button 110 up
              view.frame = frame
            }
        }
    }
}

扩展以获取类名。

extension NSObject {
  var theClassName: String {
    return NSStringFromClass(self.dynamicType)
  }
}

我会尽快将此代码更新到Swift 3.0 。:)

于 2016-10-18T13:53:33.190 回答
0

现在我发现的唯一方法是这样:

//The method 'each' is part of Objective Sugar 
[googleMapView.subviews each:^(UIView *object) {
    if([[[object class] description] isEqualToString:@"GMSUISettingsView"] )
    {
        CGPoint center = object.center;
        center.y -= 40; //Let's move it 40px up
        object.center = center;
    }
}];

它工作正常,但官方方式会更好。

这适用于 1.4.0 版本。对于以前的版本,更改@"GMSUISettingsView"@"UIButton".

于 2013-06-19T03:13:51.350 回答