我正在创建类似于以下方式的自定义信息窗口,用于谷歌地图:
这样做是有效的,但我无法添加任何约束条件,因为这样会填满整个屏幕并变成空白。所以我决定不使用自动布局来完成这项工作。
我的内容是一些标签,一个接一个地排列。在某些情况下,文本不能适应单行,标签框架应该增加。同时,整个视图框架也必须增加,并且下面的视图必须正确偏移。我已经编写了一个方法来实现此功能,除了信息窗口视图框架本身外,所有东西都在发生变化。在日志中,我可以看到框架已更改,但在屏幕上,它仍然具有原始大小,并且文本在其外面。
我甚至尝试仅更改信息窗口框架,但仍然没有效果-根本不会改变。
我还尝试调用[subview layoutIfNeeded]和[subview layoutSubviews]。
那么,如何制作具有动态大小的信息窗口?
编辑:
如@Milan所要求的,整个代码如下:
我正在创建自定义信息窗口来显示谷歌地图上的信息,如下所示:
NSArray *subviewArray = [[NSBundle mainBundle] loadNibNamed:@"InfoView" owner:self options:nil];
InfoView *mainView = [subviewArray objectAtIndex:0];
UIView *subview = mainView.subviews[0];
//setup content
return subview;
这样做是有效的,但我无法添加任何约束条件,因为这样会填满整个屏幕并变成空白。所以我决定不使用自动布局来完成这项工作。
我的内容是一些标签,一个接一个地排列。在某些情况下,文本不能适应单行,标签框架应该增加。同时,整个视图框架也必须增加,并且下面的视图必须正确偏移。我已经编写了一个方法来实现此功能,除了信息窗口视图框架本身外,所有东西都在发生变化。在日志中,我可以看到框架已更改,但在屏幕上,它仍然具有原始大小,并且文本在其外面。
我甚至尝试仅更改信息窗口框架,但仍然没有效果-根本不会改变。
我还尝试调用[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;
}