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

iOS/Obj-C:将Google Map加载到自定义UIView出现空白问题求助

问题原因与解决方案:自定义UIView中Google Map显示空白

我一眼就看出问题所在了——你覆盖了自己的IBOutlet引用,导致Storyboard/XIB里的自定义UIView根本没被用上,自然显示空白。

问题核心分析

你已经在.h文件里声明了IBOutlet GMSMapView *mapView,这说明你应该是在界面编辑器里把一个自定义UIView(设置了类为GMSMapView)和这个属性做了连接。但在viewDidLoad里,你写了这行代码:

self.mapView = [GMSMapView mapWithFrame:CGRectZero camera:self.camera];

这直接创建了一个全新的GMSMapView实例,覆盖了原来的IBOutlet引用,然后你把这个新视图加到了self.view上——而你原本想使用的那个自定义UIView(Storyboard里的)完全没被赋值和配置,所以它只能显示空白。

修复后的代码

把viewDidLoad里的代码修改成这样,直接使用已连接的IBOutlet实例:

-(void)viewDidLoad {
    [super viewDidLoad]; // 别忘了调用父类方法!

    // 1. 给已有的mapView设置相机参数
    self.camera = [GMSCameraPosition cameraWithLatitude:-33.868 longitude:151.2086 zoom:12];
    self.mapView.camera = self.camera;

    // 2. 配置地图设置
    self.mapView.settings.compassButton = YES;
    self.mapView.settings.myLocationButton = YES;
    [self.mapView addObserver:self forKeyPath:@"myLocation" options:NSKeyValueObservingOptionNew context:NULL];

    // 3. 加载地图样式
    NSBundle *mainBundle = [NSBundle mainBundle];
    NSURL *styleUrl = [mainBundle URLForResource:@"style" withExtension:@"json"];
    NSError *error;
    GMSMapStyle *style = [GMSMapStyle styleWithContentsOfFileURL:styleUrl error:&error];
    NSLog(@"This is what %@", style);
    if (!style) {
        NSLog(@"The style definition could not be loaded: %@", error);
    } else {
        NSLog(@"Style Loaded");
    }
    self.mapView.mapStyle = style;

    // 4. 启用我的位置(主线程执行)
    dispatch_async(dispatch_get_main_queue(), ^{
        self.mapView.myLocationEnabled = YES;
    });
}

额外注意事项

  • 确保你在Storyboard/XIB里的自定义UIView的类已经设置为GMSMapView
  • 检查IBOutlet连接是否正确:右键点击mapView属性,确认它已经和界面上的视图建立了连接
  • 不要忘记调用[super viewDidLoad];,这是UIViewController生命周期的必要步骤

这样修改后,你的自定义UIView就会正确加载配置好的Google Map了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 20:52:36