MKAnnotationView 中的 detailCalloutAccessoryView 约束

detailCalloutAccessoryView constraints in MKAnnotationView

我在调整以编程方式添加的 detailCalloutAccessoryView 的大小时遇到​​一些问题。

这是视图的代码

HCSStarRatingView *annotationRating = [[HCSStarRatingView alloc] init];
annotationView.detailCalloutAccessoryView = annotationRating;

我尝试使用 initWithFrame 初始化视图,但不知何故不起作用,我最终得到了这个。

然后我发现我必须以编程方式添加 NSLayoutConstraint 以正确调整视图大小,因此我添加了此代码以进行约束。

NSLayoutConstraint *width = [NSLayoutConstraint constraintWithItem:annotationRating attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:80];
NSLayoutConstraint *height = [NSLayoutConstraint constraintWithItem:annotationRating attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:45];
[annotationRating addConstraint:width];
[annotationRating addConstraint:height];

现在的视图是这样的

现在我想去掉它周围的白色 space。我想我必须添加一个顶部和底部约束,但我不知道该怎么做,因为我不知道我必须与哪些项目相关。

多余的空格是您选择的 height 的函数。您的图像大约是它的高度的 5 倍宽,但是您要求在 80 x 45 pts 的框中渲染它(即高度超过宽度的一半而不是五分之一的视图)。如果你选择图像视图的尺寸来匹配(调整比例)图像的大小,你会得到更像的东西:

如您所见,通过明智地选择宽度和高度,空白将比您的示例中少。请注意,细节附件视图之间存在一些您无法控制的固有空白,但通过确保正确设置宽度和高度,您可以将其减小到这些最小值。