Improve native top spacing for bottom docked modals when keyboard shows#63970
Conversation
blazejkustra
left a comment
There was a problem hiding this comment.
LGTM! I know it wasn't easy to fix on all platforms and it looks impressive, GJ 🚀
|
@dominictb Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button] |
|
hey @shawnborton please take a look at the videos and let me know if that looks ok ? |
Yeah I like that idea. But otherwise looking pretty good to me too. |
|
+1 to what Shawn is suggesting 👍 The illustration is less important than the input field and button when the keyboard is active. |
|
@shawnborton, ok managed to do that. 1 problem is that on native IOS the slide animation is "2 phased". Is that ok ? IOS nativeslide_ios_native.mp4IOS safarislide_ios_safari.mp4Android web works same as IOS safari, and for Android native this behaviour is a default. |
|
Hmm, the iOS native version looks pretty stutter-y, but I think the Safari one is looking pretty good. |
|
Oof yeah that does not feel great on iOS - how can we adjust that? I wouldn't feel comfortable shipping that personally. |
|
Ok I think I managed to unify the behaviour across platforms IOS nativeios_native.mp4IOS safariios_safari.mp4Android nativeandroid_native.movAndroid chromeandroid_chrome.mov |
|
Better, though admittedly it does still feel a bit choppy... not sure if we can do much to keep smoothening it out? |
|
@shawnborton the choppiness may be the emulator + dev build. Can we trigger ad hoc builds for the PR and check then ? |
|
Sure, I'll fire them up now. |
|
🚧 @shawnborton has triggered a test Expensify/App build. You can view the workflow run here. |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, Desktop, and Web. Happy testing! 🧪🧪
|
|
It does feel smoother on a real device: But I found a few things... we are missing SafeSpace below the buttons in the modal, notice how close the homebar is to the buttons: And as you can see from my video above, it's kinda impossible to tap outside of the modal to dismiss it. You have to tap another area in the modal to unfocus the input, which maybe isn't so bad, but not quite what I expected. |
|
I think the transition is feeling much better.
The only thing I can really think to do about this is to add an |
Ah, I mean I mostly just want to be able to tap the area by the top status bar for the modal to dismiss. Tapping that area above the modal doesn't make it close, and I think it should make it close. |
|
OH! I understand now. Yeah I agree with that. |
I also experienced this. |
|
updated the margins on input IOS nativemodal.ios.native.mp4IOS safarimodal.ios.safari.mp4Android nativemodal.android.native.movAndroid chromemodal.andorid.chrome.mov |
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppScreen.Recording.2025-06-30.at.19.05.38-compressed.movAndroid: mWeb ChromeScreen.Recording.2025-06-30.at.19.07.10-compressed.moviOS: HybridAppScreen.Recording.2025-06-30.at.17.58.13-compressed.moviOS: mWeb SafariScreen.Recording.2025-07-02.at.17.52.22-compressed.movMacOS: Chrome / SafariScreen.Recording.2025-06-30.at.19.08.44.movMacOS: DesktopScreen.Recording.2025-06-30.at.19.08.16-compressed.mov |
|
Screen.Recording.2025-06-30.at.18.00.19.mov |
|
@dominictb yeah, this is what I mentioned for IOS safari couple comments up. Bug described better here. On current |
| justifyContent: 'center', | ||
| overflow: 'hidden', | ||
| boxShadow: theme.shadow, | ||
| ...(isMobileSafari() ? {maxHeight: `${windowDimensions.windowHeight}px`} : {}), |
There was a problem hiding this comment.
Each of these platform-specific change should have an explanative comment
|
|
||
| const paddingBottom = getCombinedSpacing(styles.pb5.paddingBottom, safeAreaPaddingBottom, true); | ||
| return { | ||
| style: isMobileChrome() |
|
Also please merge |
Looks good to me! Thanks for fixing @jmusial |
|
@dominictb done and done |
|
We did not find an internal engineer to review this PR, trying to assign a random engineer to #63569 as well as to this PR... Please reach out for help on Slack if no one gets assigned! |
|
LGTM! |
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🚀 Deployed to staging by https://github.com/Gonals in version: 9.1.78-0 🚀
|
|
🚀 Deployed to production by https://github.com/mountiny in version: 9.1.78-4 🚀
|


Explanation of Change
This PR fixes 3 things for Feature Training bottom docked modals that overflow the screen when keyboard is shown :
Fixed Issues
$ #63569
PROPOSAL:
N/A
Tests
Offline tests
Same as tests
QA Steps
Same as tests
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectioncanBeMissingparam foruseOnyxtoggleReportand notonIconClick)src/languages/*files and using the translation methodSTYLE.md) were followedAvatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))Avataris modified, I verified thatAvataris working as expected in all cases)Designlabel and/or tagged@Expensify/designso the design team can review the changes.ScrollViewcomponent to make it scrollable when more elements are added to the page.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps.Screenshots/Videos
Android: Native
andorid_native.mov
Android: mWeb Chrome
android_chrome.mov
iOS: Native
ios_native.mp4
iOS: mWeb Safari
ios_safari.mp4
MacOS: Chrome / Safari
desktop_chrome.mov
MacOS: Desktop
desktop_native.mov