@lodev09/react-native-true-sheet 4.0.0-beta.27 → 4.0.0-beta.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -77,6 +77,9 @@ static char TrueSheetAccessibilityWindowPreviousElementsKey;
|
|
|
77
77
|
@implementation TrueSheetViewController {
|
|
78
78
|
TrueSheetPositionState _lastEmittedPositionState;
|
|
79
79
|
CGSize _lastReportedSize;
|
|
80
|
+
// Net of the footer's baked-in inset, snapshotted together: the inset updates
|
|
81
|
+
// with the footer's layout, but a size change mid-present is deferred to
|
|
82
|
+
// didPresent, so subtracting it live pairs a new inset with a stale height.
|
|
80
83
|
CGFloat _autoDetentHeight;
|
|
81
84
|
CGFloat _peekDetentHeight;
|
|
82
85
|
NSInteger _pendingDetentIndex;
|
|
@@ -1576,8 +1579,8 @@ static BOOL TrueSheetIsPhoneIdiom(void) {
|
|
|
1576
1579
|
*/
|
|
1577
1580
|
- (void)setupSheetDetentsForSizeChange {
|
|
1578
1581
|
if (@available(iOS 16.0, *)) {
|
|
1579
|
-
CGFloat autoHeight = [_detentCalculator autoHeightForKeyboardHeight:_keyboardHeight];
|
|
1580
|
-
CGFloat peekHeight = [_detentCalculator peekHeight];
|
|
1582
|
+
CGFloat autoHeight = [_detentCalculator autoHeightForKeyboardHeight:_keyboardHeight] - [self autoDetentBottomInset];
|
|
1583
|
+
CGFloat peekHeight = [_detentCalculator peekHeight] - [self peekDetentBottomInset];
|
|
1581
1584
|
|
|
1582
1585
|
if (fabs(autoHeight - _autoDetentHeight) < 0.5 && fabs(peekHeight - _peekDetentHeight) < 0.5) {
|
|
1583
1586
|
return;
|
|
@@ -1617,8 +1620,8 @@ static BOOL TrueSheetIsPhoneIdiom(void) {
|
|
|
1617
1620
|
[_detentCalculator clearResolvedHeights];
|
|
1618
1621
|
_hingeCorrections = 0;
|
|
1619
1622
|
|
|
1620
|
-
_autoDetentHeight = [_detentCalculator autoHeightForKeyboardHeight:_keyboardHeight];
|
|
1621
|
-
_peekDetentHeight = [_detentCalculator peekHeight];
|
|
1623
|
+
_autoDetentHeight = [_detentCalculator autoHeightForKeyboardHeight:_keyboardHeight] - [self autoDetentBottomInset];
|
|
1624
|
+
_peekDetentHeight = [_detentCalculator peekHeight] - [self peekDetentBottomInset];
|
|
1622
1625
|
|
|
1623
1626
|
for (NSInteger index = 0; index < self.detents.count; index++) {
|
|
1624
1627
|
id detent = self.detents[index];
|
|
@@ -1681,7 +1684,7 @@ static BOOL TrueSheetIsPhoneIdiom(void) {
|
|
|
1681
1684
|
return [self customDetentWithIdentifier:@"custom-auto"
|
|
1682
1685
|
atIndex:index
|
|
1683
1686
|
heightBlock:^CGFloat {
|
|
1684
|
-
return self->_autoDetentHeight
|
|
1687
|
+
return self->_autoDetentHeight;
|
|
1685
1688
|
}];
|
|
1686
1689
|
} else {
|
|
1687
1690
|
return [UISheetPresentationControllerDetent mediumDetent];
|
|
@@ -1693,7 +1696,7 @@ static BOOL TrueSheetIsPhoneIdiom(void) {
|
|
|
1693
1696
|
return [self customDetentWithIdentifier:@"custom-peek"
|
|
1694
1697
|
atIndex:index
|
|
1695
1698
|
heightBlock:^CGFloat {
|
|
1696
|
-
return self->_peekDetentHeight
|
|
1699
|
+
return self->_peekDetentHeight;
|
|
1697
1700
|
}];
|
|
1698
1701
|
} else {
|
|
1699
1702
|
return [UISheetPresentationControllerDetent mediumDetent];
|
|
@@ -22,8 +22,7 @@ using namespace facebook::react;
|
|
|
22
22
|
NSInteger _presenterScreenTag;
|
|
23
23
|
NSMutableSet<NSNumber *> *_screenTags;
|
|
24
24
|
__weak UIViewController *_presenterScreenController;
|
|
25
|
-
|
|
26
|
-
__weak UIWindow *_window;
|
|
25
|
+
NSHashTable<UIViewController *> *_parentScreenControllers;
|
|
27
26
|
BOOL _dismissedByNavigation;
|
|
28
27
|
BOOL _pendingInteractiveDismiss;
|
|
29
28
|
BOOL _pendingInteractiveAppear;
|
|
@@ -39,8 +38,7 @@ using namespace facebook::react;
|
|
|
39
38
|
_presenterScreenTag = 0;
|
|
40
39
|
_screenTags = [NSMutableSet new];
|
|
41
40
|
_presenterScreenController = nil;
|
|
42
|
-
|
|
43
|
-
_window = nil;
|
|
41
|
+
_parentScreenControllers = [NSHashTable weakObjectsHashTable];
|
|
44
42
|
}
|
|
45
43
|
return self;
|
|
46
44
|
}
|
|
@@ -143,8 +141,7 @@ using namespace facebook::react;
|
|
|
143
141
|
_presenterScreenTag = 0;
|
|
144
142
|
[_screenTags removeAllObjects];
|
|
145
143
|
_presenterScreenController = nil;
|
|
146
|
-
|
|
147
|
-
_window = view.window;
|
|
144
|
+
[_parentScreenControllers removeAllObjects];
|
|
148
145
|
|
|
149
146
|
Class screenViewClass = NSClassFromString(@"RNSScreenView");
|
|
150
147
|
if (!screenViewClass)
|
|
@@ -165,8 +162,8 @@ using namespace facebook::react;
|
|
|
165
162
|
if (!_presenterScreenController) {
|
|
166
163
|
_presenterScreenTag = current.tag;
|
|
167
164
|
_presenterScreenController = screenVC;
|
|
168
|
-
} else if (
|
|
169
|
-
|
|
165
|
+
} else if (screenVC) {
|
|
166
|
+
[_parentScreenControllers addObject:screenVC];
|
|
170
167
|
}
|
|
171
168
|
}
|
|
172
169
|
}
|
|
@@ -239,27 +236,16 @@ using namespace facebook::react;
|
|
|
239
236
|
}
|
|
240
237
|
|
|
241
238
|
- (BOOL)shouldDismissForScreenTag:(NSInteger)screenTag {
|
|
242
|
-
// For parent screens
|
|
243
|
-
//
|
|
239
|
+
// For parent screens, dismiss if one was popped or covered in its own stack. The presenter
|
|
240
|
+
// may already be detached (e.g. its nested stack unmounting), so it can't be checked here.
|
|
241
|
+
// Skip if all are still top (e.g. modal dismiss - sheet dismisses naturally)
|
|
244
242
|
if (screenTag != _presenterScreenTag) {
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
return NO;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
if (!_parentScreenController) {
|
|
254
|
-
return NO;
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
// If presenter view is no longer in window, the nested stack is being removed
|
|
258
|
-
UIView *presenterView = [_window viewWithTag:_presenterScreenTag];
|
|
259
|
-
if (presenterView == nil || presenterView.window == nil) {
|
|
260
|
-
return YES;
|
|
243
|
+
for (UIViewController *screen in _parentScreenControllers) {
|
|
244
|
+
UINavigationController *nav = screen.navigationController;
|
|
245
|
+
if (nav && nav.topViewController != screen) {
|
|
246
|
+
return YES;
|
|
247
|
+
}
|
|
261
248
|
}
|
|
262
|
-
|
|
263
249
|
return NO;
|
|
264
250
|
}
|
|
265
251
|
|
package/package.json
CHANGED