-
Notifications
You must be signed in to change notification settings - Fork 1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
bug(android): overlaying status bar does not affect safe area insets #2840
Comments
Looks like despite they implemented, it doesn't work, it always returns 0. so this is a Chromium bug, not a Capacitor bug. For getting the safe areas, that seems to be possible on SDK 29+, so could be added in some plugin (Status Bar maybe?), so closing as feature request. Issues tagged with feature request are closed but tracked for👍 reactions to gauge interest. |
Hi there, do you have any information on this ? Thank you ! |
Has anyone figured this out? Looking for how to overlay content behind the status bar (so the color of it matches the content), but push the content down so that it isn't actually behind the status bar. Seems like ion-toolbar needs the safe area padding on top but its always 0. |
Same issue here! @Cyral have you been successful yet? |
@haschu Nope. Tons of apps do this, seems very common - but still haven't found a way with Capacitor/Ionic |
Nothing yet? |
Is there any workaround for this issue? |
I had the same problem |
I'm developing a plugin that sends the device insets, at the moment works only on android, and send only top, its for a emergency.
|
It's not settled yet? |
coming back to this issue after a year. any idea what the recommended way to handle this issue is? |
Apparently it's actually an issue on the Android webview side. Tracking it here: https://bugs.chromium.org/p/chromium/issues/detail?id=1094366 Of course whenever this does get fixed there will be a ton of devices no longer receiving manufacturer updates that will never get it. |
No workaround yet? |
I ended up making my own workaround but it's hacky and somewhat complicated. In
Then I use a plugin to get the display insets:
And set the safe area to the insets upon startup in index.tsx: (Native is the name of the plugin I created for this)
Lastly, ion-modals (without a top header) don't seem to respect the safe area, so I had to add the following to my CSS:
Once the Chromium bug is fixed, only the CSS part should be needed. That part appears to be a bug in ionic. |
I believe this also results in keyboard height getting calculated incorrectly on Android devices with a top notch. @Cyral any chance you could share your plugin? (Edit: I found this plugin which seems to do what's required - https://github.com/capacitor-community/safe-area) |
This has nothing to do with Safe Area, this should be handled with Android default behavior for as you can find here: https://github.com/razir/MoviesInsetsDemo. Safe area should be used only for the web, where a native approach should be used inside of the WebView. Both navigation and the status bar should use this Android API since Android manufacturers handle notches and navigation bars differently and they all use this Android standardized approach. Our team will contribute to Capacitor with this fix please feel free to review and merge. |
I published a plugin, based on other peoples repos, to get the value of status bar, regardless if it's ionic bug or chromium. https://github.com/owlsdepartment/capacitor-plugin-android-insets |
this problem is easily solved by adding in app.module imports.
A demo in Cordova to be seen here |
Thanks for the issue! This issue is being locked to prevent comments that are not relevant to the original issue. If this is still an issue with the latest version of Capacitor, please create a new issue and ensure the template is fully filled out. |
Bug Report
Capacitor Version
npx cap doctor
output:$ npx cap doctor
💊 Capacitor Doctor 💊
Latest Dependencies:
@capacitor/cli: 2.0.1
@capacitor/core: 2.0.1
@capacitor/android: 2.0.1
@capacitor/electron: 2.0.1
@capacitor/ios: 2.0.1
Installed Dependencies:
@capacitor/electron not installed
@capacitor/cli 2.0.1
@capacitor/core 2.0.1
@capacitor/android 2.0.1
@capacitor/ios 2.0.1
[success] Android looking great! 👌
Found 10 Capacitor plugins for ios:
@mauron85/cordova-plugin-background-geolocation (3.1.0)
capacitor-data-storage-sqlite (2.0.0-1)
capacitor-voice-recorder (0.0.9)
cordova-plugin-android-permissions (1.0.2)
cordova-plugin-app-version (0.1.9)
cordova-plugin-file (6.0.2)
cordova-plugin-file-transfer (1.7.1)
cordova-plugin-screen-orientation (3.0.2)
cordova-plugin-whitelist (1.3.4)
es6-promise-plugin (4.2.2)
[success] iOS looking great! 👌
Affected Platform(s)
Current Behavior
On iOS, I leave space for the iPhone X notch & iPhone 6 status bar using
<meta name="viewport" content="viewport-fit=cover" />
along withenv(safe-area-inset-top)
, as described in #2100 .I would love to do the same thing in Android, however it appears that overlaying the status bar via
StatusBar.setOverlaysWebView({ overlay: true })
does not affectenv(safe-area-inset-top)
in the CSS.env(safe-area-inset-*)
has officially been supported since Chrome 69 (announcement) though how extensively I don't know.Expected Behavior
I would expect
env(safe-area-inset-top)
to include the height of the status bar if it is overlaid.Reproduction Steps
Other Technical Details
npm --version
output: 6.14.4node --version
output: v12.16.1Other Information
If fixing
env(safe-area-inset-top)
is not possible, I would be satisfied being able to access the safe area insets via a Plugin, or injected CSS variables (e.g.--android-safe-area-inset-top
or similar).The text was updated successfully, but these errors were encountered: