From 6cce021400280ecfe354c25492dfd6bbb2db19e6 Mon Sep 17 00:00:00 2001 From: Maciej Stosio Date: Thu, 27 Mar 2025 16:30:15 +0100 Subject: [PATCH 1/4] fix: fix header height --- ios/RNSScreenStack.mm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ios/RNSScreenStack.mm b/ios/RNSScreenStack.mm index 9eb103b135..89c9b66c46 100644 --- a/ios/RNSScreenStack.mm +++ b/ios/RNSScreenStack.mm @@ -77,7 +77,8 @@ - (void)viewDidLayoutSubviews RNSScreen *screenController = (RNSScreen *)self.topViewController; BOOL isNotDismissingModal = screenController.presentedViewController == nil || (screenController.presentedViewController != nil && - ![screenController.presentedViewController isBeingDismissed]); + ![screenController.presentedViewController isBeingDismissed]) || + ([screenController.presentedViewController isKindOfClass:[UISearchController class]]); // Calculate header height during simple transition from one screen to another. // If RNSScreen includes a navigation controller of type RNSNavigationController, it should not calculate From b6fbfea122601c09bfdd0cd17952667a07585fb4 Mon Sep 17 00:00:00 2001 From: Maciej Stosio Date: Mon, 31 Mar 2025 12:32:03 +0200 Subject: [PATCH 2/4] chore: add test case --- apps/src/tests/Test2611.tsx | 36 ++++++++++++++++++++++++++++++++++++ apps/src/tests/index.ts | 1 + 2 files changed, 37 insertions(+) create mode 100644 apps/src/tests/Test2611.tsx diff --git a/apps/src/tests/Test2611.tsx b/apps/src/tests/Test2611.tsx new file mode 100644 index 0000000000..4f17acf120 --- /dev/null +++ b/apps/src/tests/Test2611.tsx @@ -0,0 +1,36 @@ +import { ScrollView, Text } from 'react-native'; +import { NavigationContainer } from '@react-navigation/native'; +import { createNativeStackNavigator } from '@react-navigation/native-stack'; +import { useHeaderHeight } from '@react-navigation/elements'; + +const Stack = createNativeStackNavigator(); + +function HomeScreen() { + const margin = useHeaderHeight(); + + return ( + + focus and then cancel to see if position updates + + ); +} + +function RootStack() { + return ( + + + + ); +} + +export default function App() { + return ( + + + + ); +} diff --git a/apps/src/tests/index.ts b/apps/src/tests/index.ts index 71ebe256af..bb7b8c3f31 100644 --- a/apps/src/tests/index.ts +++ b/apps/src/tests/index.ts @@ -125,6 +125,7 @@ export { default as Test2675 } from './Test2675'; export { default as Test2717 } from './Test2717'; export { default as Test2767 } from './Test2767'; export { default as Test2789 } from './Test2789'; +export { default as Test2611 } from './Test2611'; export { default as TestScreenAnimation } from './TestScreenAnimation'; export { default as TestScreenAnimationV5 } from './TestScreenAnimationV5'; export { default as TestHeader } from './TestHeader'; From 97e4b0d4043fd1422d9bd0bb0f71a4addea16028 Mon Sep 17 00:00:00 2001 From: Maciej Stosio Date: Mon, 31 Mar 2025 17:49:30 +0200 Subject: [PATCH 3/4] chore: add changes from comments --- ios/RNSScreenStack.mm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ios/RNSScreenStack.mm b/ios/RNSScreenStack.mm index 89c9b66c46..3a70c05246 100644 --- a/ios/RNSScreenStack.mm +++ b/ios/RNSScreenStack.mm @@ -77,13 +77,14 @@ - (void)viewDidLayoutSubviews RNSScreen *screenController = (RNSScreen *)self.topViewController; BOOL isNotDismissingModal = screenController.presentedViewController == nil || (screenController.presentedViewController != nil && - ![screenController.presentedViewController isBeingDismissed]) || + ![screenController.presentedViewController isBeingDismissed]); + BOOL isPresentingSearchController = ([screenController.presentedViewController isKindOfClass:[UISearchController class]]); // Calculate header height during simple transition from one screen to another. // If RNSScreen includes a navigation controller of type RNSNavigationController, it should not calculate // header height, as it could have nested stack. - if (![screenController hasNestedStack] && isNotDismissingModal) { + if (![screenController hasNestedStack] && (isPresentingSearchController || isNotDismissingModal)) { [screenController calculateAndNotifyHeaderHeightChangeIsModal:NO]; } From f27cc42dc736a8df572f45660e6736485acd6433 Mon Sep 17 00:00:00 2001 From: Maciej Stosio Date: Tue, 1 Apr 2025 12:20:05 +0200 Subject: [PATCH 4/4] Update ios/RNSScreenStack.mm Co-authored-by: Kacper Kafara --- ios/RNSScreenStack.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ios/RNSScreenStack.mm b/ios/RNSScreenStack.mm index 3a70c05246..816d991f3b 100644 --- a/ios/RNSScreenStack.mm +++ b/ios/RNSScreenStack.mm @@ -79,7 +79,7 @@ - (void)viewDidLayoutSubviews (screenController.presentedViewController != nil && ![screenController.presentedViewController isBeingDismissed]); BOOL isPresentingSearchController = - ([screenController.presentedViewController isKindOfClass:[UISearchController class]]); + [screenController.presentedViewController isKindOfClass:UISearchController.class]; // Calculate header height during simple transition from one screen to another. // If RNSScreen includes a navigation controller of type RNSNavigationController, it should not calculate