我正在像这样在谷歌地图上创建自定义信息窗口:
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/