3

默认情况下MGLMapViewscaleBar视图位于地图的左上角。我想把它移到左下角,但是这样做有问题。要么我的NSLayoutConstraint代码错误,要么发生了其他事情。仍然卡scaleBar在左上角。

这是我尝试过的:

NSMutableArray *scaleBarConstraints = [[NSMutableArray alloc] init];
[self.mapboxMapView removeConstraints:self.mapboxMapView.scaleBar.constraints];
[scaleBarConstraints addObject:
 [NSLayoutConstraint constraintWithItem:self.mapboxMapView.scaleBar
                              attribute:NSLayoutAttributeBottom
                              relatedBy:NSLayoutRelationGreaterThanOrEqual
                                 toItem:self.mapboxMapView
                              attribute:NSLayoutAttributeBottom
                             multiplier:1.0
                               constant:8.0 + self.mapboxMapView.contentInset.bottom]];
[scaleBarConstraints addObject:
 [NSLayoutConstraint constraintWithItem:self.mapboxMapView.scaleBar
                              attribute:NSLayoutAttributeLeft
                              relatedBy:NSLayoutRelationEqual
                                 toItem:self.mapboxMapView
                              attribute:NSLayoutAttributeLeft
                             multiplier:1.0
                               constant:8.0 + self.mapboxMapView.contentInset.left]];

[self.mapboxMapView addConstraints:scaleBarConstraints];

还有其他方法可以做到这一点还是我错过了什么?

4

2 回答 2

1

首先,您的第一个约束指定了一个NSLayoutRelationGreaterThanOrEqual关系,因此这意味着您scaleBar的底边必须位于地图视图底边上方的某个位置(+ 您指定的常量)。

当比例尺位于地图视图的顶部时,这显然是正确的。所以尝试替换NSLayoutRelationGreaterThanOrEqualNSLayoutRelationEqual看看它是否有效。

警告1:

您正在添加self.mapboxMapView不是scaleBar. (在Mapbox库中,他们将约束添加到 a containerView。)这是不好的做法。我建议使用

[NSLayoutConstraint activateConstraints:scaleBarConstraints];

相反,它将自动将约束添加到适当的视图中。(Apple 在他们的文档中建议这样做。)

警告 2:

通常,您不应该破解另一个类(您不拥有)的视图层次结构。您不能假设它不会在某个时间点创建新的约束,这可能会覆盖或与您自己的约束发生冲突。

于 2018-08-22T23:12:17.433 回答
0

要更改 scaleBar 位置,您可以使用scaleBarPosition特定位置的属性进行变异,另外您可以使用scaleBarMargins属性作为边距,例如:

scaleBarMargins = CGPoint(x: scaleBar.frame.origin.x + 'offsetX', y: scaleBar.frame.origin.y + 'offsetY')

希望能帮助到你!

于 2020-01-30T15:53:02.180 回答