diff options
Diffstat (limited to 'platform')
-rw-r--r-- | platform/ios/src/MGLMapView.mm | 5 | ||||
-rw-r--r-- | platform/ios/test/MGLMapViewLayoutTests.m | 21 |
2 files changed, 26 insertions, 0 deletions
diff --git a/platform/ios/src/MGLMapView.mm b/platform/ios/src/MGLMapView.mm index 62b943fd3d..edc127dd88 100644 --- a/platform/ios/src/MGLMapView.mm +++ b/platform/ios/src/MGLMapView.mm @@ -962,6 +962,11 @@ public: [self updateUserLocationAnnotationView]; [self updateAttributionAlertView]; + + if (!CGRectContainsRect(self.bounds, self.attributionButton.frame)) { + [NSException raise:NSInvalidArgumentException + format:@"The attribution is not in the visible area of the mapview. Please check your position and offset settings"]; + } } /// Updates `contentInset` to reflect the current window geometry. diff --git a/platform/ios/test/MGLMapViewLayoutTests.m b/platform/ios/test/MGLMapViewLayoutTests.m index 5d9c0339b5..f3eeb75c0d 100644 --- a/platform/ios/test/MGLMapViewLayoutTests.m +++ b/platform/ios/test/MGLMapViewLayoutTests.m @@ -211,6 +211,27 @@ } } +- (void)testAttributionButtonPlacementInvalidPosition { + CGFloat margin = -400.0; + + UIView *attributionButton = self.mapView.attributionButton; + NSArray *testDataList = [self makeTestDataListWithView:attributionButton margin:margin]; + + for (MGLOrnamentTestData *testData in testDataList) { + self.mapView.attributionButtonPosition = testData.position; + self.mapView.attributionButtonMargins = testData.offset; + + //invoke layout + [self.superView setNeedsLayout]; + XCTAssertThrowsSpecificNamed( + [self.superView layoutIfNeeded], + NSException, + NSInvalidArgumentException, + @"should throw NSInvalidArgumentException" + ); + } +} + - (void)testLogoPlacement { double accuracy = 0.01; CGFloat margin = 4.0; |