ios - 动态信息窗口大小 ios 谷歌地图

标签 ios objective-c google-maps

我正在像这样在谷歌地图上创建自定义信息窗口:

NSArray *subviewArray = [[NSBundle mainBundle] loadNibNamed:@"InfoView" owner:self options:nil];
InfoView *mainView = [subviewArray objectAtIndex:0];
UIView *subview = mainView.subviews[0];
//setup content
return subview;

这样它工作正常,但我不能添加任何约束,因为那样它会填满整个屏幕并变成空白。所以我决定在没有自动布局的情况下执行此操作。

我的内容是几个标签一个接一个。在相同的情况下,文本不能适合单行,然后标签框架应该增加。同时,整个 View 框架也必须增加,并且下面的 View 必须适当偏移。我已经做了一个方法来做到这一点,除了信息窗口 View 框架本身之外,一切都在改变。在日志中,我可以看到框架已更改,但在屏幕上,它具有原始大小并且文本位于其外部。

我什至尝试只更改信息窗口框架,但仍然没有效果——它根本没有改变。

我也试过调用 [subview layoutIfNeeded][subview layoutSubviews]

那么,如何制作动态大小的信息窗口呢?

编辑:

@Milan 要求的完整代码:

- (UIView *_Nullable) mapView:(GMSMapView *)mapView markerInfoContents: (GMSMarker *)marker {
    NSArray *subviewArray = [[NSBundle mainBundle] loadNibNamed:@"PortView" owner:self options:nil];
    PortView *mainView = [subviewArray objectAtIndex:0];
    UIView *subview = mainView.subviews[0];
    mainView.frame = CGRectMake(mainView.frame.origin.x, mainView.frame.origin.y, mainView.frame.size.width, mainView.frame.size.height + 40) //increase frame size doesn't work
    mainView.titleLabel.text = portSzukany.name;
    return subview;
}

最佳答案

您需要实现 GMSMapViewDelegate 并从以下方法返回信息 View :

- (UIView *GMS_NULLABLE_PTR)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker;

根据对该方法的描述,“返回的 UIView 在任一维度上的边界不得超过 500 个点。”

关于ios - 动态信息窗口大小 ios 谷歌地图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44672663/

相关文章:

ios - 为什么我的按钮显示但无法点击?

ios - 如何将中文 Html String 转换成 NSString

iphone - 没有打开 FBDialog 的 iOS 我需要分享我的参数

javascript - 引入当前位置的 Google map 'infowindow' 信息

ios - Button.center 不适用于 Swift 3/4 中的所有屏幕

ios - 使用 URLSession 从另一个类调用时,属性变为空

javascript - 在谷歌地图中找到一个圆圈内的所有经纬度

ios - 显示 Google map 的 UIWebView 切断了缩放控件

android - 如何通过 Google 标签管理器在 Intercom 中设置事件跟踪

ios - 由背景位置触发的音频