From 283894f3739eecbe2e502626c13b1a3aa1371592 Mon Sep 17 00:00:00 2001 From: Lloyd Sheng Date: Tue, 9 Apr 2019 17:47:12 +0800 Subject: Make sure attribution in proper position --- platform/ios/src/MGLMapView.mm | 5 +++++ platform/ios/test/MGLMapViewLayoutTests.m | 21 +++++++++++++++++++++ 2 files changed, 26 insertions(+) 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; -- cgit v1.2.1