Skip to content

Commit dea1c26

Browse files
authored
fix(header): fix collapsing iOS header when using with split pane (#19480)
fixes #19541
1 parent 17614cd commit dea1c26

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

core/src/components/header/header.utils.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,9 @@ export const handleToolbarIntersection = (ev: any, mainHeaderIndex: HeaderIndex,
8888
const rootArea = event.rootBounds.width * event.rootBounds.height;
8989

9090
const isPageHidden = intersectionArea === 0 && rootArea === 0;
91-
const isPageTransitioning = intersectionArea > 0 && (intersection.left !== event.rootBounds.left || intersection.right !== event.rootBounds.right);
91+
const leftDiff = Math.abs(intersection.left - event.boundingClientRect.left);
92+
const rightDiff = Math.abs(intersection.right - event.boundingClientRect.right);
93+
const isPageTransitioning = intersectionArea > 0 && (leftDiff >= 5 || rightDiff >= 5);
9294

9395
if (isPageHidden || isPageTransitioning) {
9496
return;

core/src/utils/transition/ios.transition.ts

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -61,13 +61,15 @@ const createLargeTitleTransition = (rootAnimation: IonicAnimation, rtl: boolean,
6161
};
6262

6363
const animateBackButton = (rootAnimation: IonicAnimation, rtl: boolean, backDirection: boolean, backButtonEl: any) => {
64+
const backButtonBounds = backButtonEl.getBoundingClientRect();
65+
const BACK_BUTTON_START_OFFSET = (rtl) ? `calc(100% - ${backButtonBounds.right + 4}px)` : `${backButtonBounds.left - 4}px`;
6466
const START_TEXT_TRANSLATE = (rtl) ? '7px' : '-7px';
6567
const END_TEXT_TRANSLATE = (rtl) ? '-4px' : '4px';
6668

6769
const ICON_TRANSLATE = (rtl) ? '-4px' : '4px';
6870

69-
const TEXT_TRANSFORM_ORIGIN_X = (rtl) ? 'right' : 'left';
70-
const ICON_TRANSFORM_ORIGIN_X = (rtl) ? 'left' : 'right';
71+
const TEXT_ORIGIN_X = (rtl) ? 'right' : 'left';
72+
const ICON_ORIGIN_X = (rtl) ? 'left' : 'right';
7173

7274
const FORWARD_TEXT_KEYFRAMES = [
7375
{ offset: 0, opacity: 0, transform: `translate(${START_TEXT_TRANSLATE}, ${addSafeArea(8)}) scale(2.1)` },
@@ -113,29 +115,33 @@ const animateBackButton = (rootAnimation: IonicAnimation, rtl: boolean, backDire
113115

114116
enteringBackButtonTextAnimation
115117
.beforeStyles({
116-
'transform-origin': `${TEXT_TRANSFORM_ORIGIN_X} center`
118+
'transform-origin': `${TEXT_ORIGIN_X} center`
117119
})
118120
.beforeAddWrite(() => {
119121
backButtonEl.style.setProperty('display', 'none');
122+
clonedBackButtonEl.style.setProperty(TEXT_ORIGIN_X, BACK_BUTTON_START_OFFSET);
120123
})
121124
.afterAddWrite(() => {
122125
backButtonEl.style.setProperty('display', '');
123126
clonedBackButtonEl.style.setProperty('display', 'none');
127+
clonedBackButtonEl.style.removeProperty(TEXT_ORIGIN_X);
124128
})
125129
.keyframes(TEXT_KEYFRAMES);
126130

127131
enteringBackButtonIconAnimation
128132
.beforeStyles({
129-
'transform-origin': `${ICON_TRANSFORM_ORIGIN_X} center`
133+
'transform-origin': `${ICON_ORIGIN_X} center`
130134
})
131135
.keyframes(ICON_KEYFRAMES);
132136

133137
rootAnimation.addAnimation([enteringBackButtonTextAnimation, enteringBackButtonIconAnimation]);
134138
};
135139

136140
const animateLargeTitle = (rootAnimation: IonicAnimation, rtl: boolean, backDirection: boolean, largeTitleEl: any) => {
141+
const largeTitleBounds = largeTitleEl.getBoundingClientRect();
142+
const TITLE_START_OFFSET = (rtl) ? `calc(100% - ${largeTitleBounds.right}px)` : `${largeTitleBounds.left}px`;
137143
const START_TRANSLATE = (rtl) ? '-18px' : '18px';
138-
const TRANSFORM_ORIGIN_X = (rtl) ? 'right' : 'left';
144+
const ORIGIN_X = (rtl) ? 'right' : 'left';
139145

140146
const BACKWARDS_KEYFRAMES = [
141147
{ offset: 0, opacity: 0, transform: `translate(${START_TRANSLATE}, ${addSafeArea(0)}) scale(0.49)` },
@@ -160,10 +166,11 @@ const animateLargeTitle = (rootAnimation: IonicAnimation, rtl: boolean, backDire
160166

161167
clonedLargeTitleAnimation
162168
.beforeStyles({
163-
'transform-origin': `${TRANSFORM_ORIGIN_X} center`,
169+
'transform-origin': `${ORIGIN_X} center`,
164170
'height': '46px',
165171
'display': '',
166-
'position': 'relative'
172+
'position': 'relative',
173+
[ORIGIN_X]: TITLE_START_OFFSET
167174
})
168175
.beforeAddWrite(() => {
169176
largeTitleEl.style.setProperty('display', 'none');

0 commit comments

Comments
 (0)