Skip to content

Commit ab10a80

Browse files
fix: measure frame relative to nearest view controller
1 parent b4ae2f8 commit ab10a80

File tree

4 files changed

+16
-2
lines changed

4 files changed

+16
-2
lines changed

ios/Fabric/RNCSafeAreaProviderComponentView.mm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ - (void)invalidateSafeAreaInsets
5858
}
5959

6060
UIEdgeInsets safeAreaInsets = self.safeAreaInsets;
61-
CGRect frame = [self convertRect:self.bounds toView:nil];
61+
CGRect frame = [self convertRect:self.bounds toView:RNCParentViewController(self).view];
6262

6363
if (_initialInsetsSent &&
6464
UIEdgeInsetsEqualToEdgeInsetsWithThreshold(safeAreaInsets, _currentSafeAreaInsets, 1.0 / RCTScreenScale()) &&

ios/RNCSafeAreaProvider.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ - (void)invalidateSafeAreaInsets
4949
}
5050

5151
UIEdgeInsets safeAreaInsets = self.safeAreaInsets;
52-
CGRect frame = [self convertRect:self.bounds toView:nil];
52+
CGRect frame = [self convertRect:self.bounds toView:RNCParentViewController(self).view];
5353

5454
if (_initialInsetsSent &&
5555
UIEdgeInsetsEqualToEdgeInsetsWithThreshold(safeAreaInsets, _currentSafeAreaInsets, 1.0 / RCTScreenScale()) &&

ios/RNCSafeAreaUtils.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,5 @@ extern NSString *const RNCSafeAreaDidChange;
66

77
RCT_EXTERN BOOL
88
UIEdgeInsetsEqualToEdgeInsetsWithThreshold(UIEdgeInsets insets1, UIEdgeInsets insets2, CGFloat threshold);
9+
10+
RCT_EXTERN UIViewController *RNCParentViewController(UIView *view);

ios/RNCSafeAreaUtils.m

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,15 @@ BOOL UIEdgeInsetsEqualToEdgeInsetsWithThreshold(UIEdgeInsets insets1, UIEdgeInse
99
return ABS(insets1.left - insets2.left) <= threshold && ABS(insets1.right - insets2.right) <= threshold &&
1010
ABS(insets1.top - insets2.top) <= threshold && ABS(insets1.bottom - insets2.bottom) <= threshold;
1111
}
12+
13+
UIViewController *RNCParentViewController(UIView *view)
14+
{
15+
UIResponder *responder = view.nextResponder;
16+
while (responder != nil) {
17+
if ([responder isKindOfClass:[UIViewController class]]) {
18+
return (UIViewController *)responder;
19+
}
20+
responder = responder.nextResponder;
21+
}
22+
return nil;
23+
}

0 commit comments

Comments
 (0)