Google Maps Info 窗口根据内部内容调整大小

sky*_*lex 3 google-maps objective-c ios autolayout

我正在- (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker基于UIStoryboardusing Autolayout使用此方法创建自定义信息窗口。我预计一些内部视图会因接收到的实际文本信息而调整大小,并且信息窗口的最终大小将与 IB 的视图不同。

实际上,结果我的 InfoWindow 视图尝试全屏大小,没有任何帮助来解决这个问题。玩autoresizingMask不会改变任何东西,与设置相同的结果Hugging Priority。唯一的方法是设置一个固定的大小约束,我已经为宽度做了这个。但是对于高度,我需要根据内部内容的实际大小动态计算大小。

更新:添加了 Storyboard 的屏幕截图

在此处输入图片说明

在此处输入图片说明

更新 2:具有 2 个滚动视图的示例测试,具有覆盖方法intrinsicContentSize

- (CGSize)intrinsicContentSize {
    [self layoutIfNeeded];
    return self.contentSize;
}
Run Code Online (Sandbox Code Playgroud)

内部 UIScrollView 通过所有 4 个边附加到基本滚动视图 内部 UIScrollView 通过所有 4 个边附加到基本滚动视图

内部 UIScrollView 仅附加到顶部和左侧 内部 UIScrollView 仅附加到顶部和左侧 示例测试视图层次结构 示例测试视图层次结构

如您所见,全屏根目录UIScrollView(蓝色边框)仍然存在。内部UIScrollView(绿色)对其没有影响。它仍然具有全屏尺寸

sky*_*lex 5

不幸的是,我发现的唯一方法是使用显式框架,它需要手动计算,并且根本不使用 Google Maps InfoWindow 自动布局

我做了几个测试来验证相同的视图如何显示为 的子视图UIWindow,并发现行为是不同的。