glanceapp / glance

A self-hosted dashboard that puts all your feeds in one place
GNU Affero General Public License v3.0
7.21k stars 249 forks source link

[Bug] iOS no save space #158

Open adrian-goe opened 2 months ago

adrian-goe commented 2 months ago

On iOS, you are able to save the page on the home screen. The site then acts like a normal app and dose not have the normal browser ui stuff.

This means on an iPhone 14 pro for example, the save space with the notch is not respected. Unfortunatly, you cant see this really on the screenshot, but you can see the time and status stuff.

There is an fairly easy css trick https://developer.mozilla.org/en-US/docs/Web/CSS/env

:root {
    --safe-top: env(safe-area-inset-top);
    --safe-right: env(safe-area-inset-right);
    --safe-bottom: env(safe-area-inset-bottom);
    --safe-left: env(safe-area-inset-left);
}

body {
    padding: var(--safe-top) var(--safe-right) var(--safe-bottom) var(--safe-left);
    margin: 0;
    box-sizing: border-box;
}

IMG_3083

svilenmarkov commented 2 months ago

Hey, thanks for reporting this!

That's quite odd because there is some CSS in place that should account for the safe area at the top and bottom. I'm wondering if it's not working because of the display-mode: standalone requirement. I don't have an iPhone so I can't really play around and see what works and what doesn't.

On iOS, you are able to save the page on the home screen.

Do you know whether this turns it into a PWA or just a shortcut to the page without the browser UI?

adrian-goe commented 2 months ago

hi @svilenmarkov

Do you know whether this turns it into a PWA or just a shortcut to the page without the browser UI?

I don't know how to check if its saved as PWA or just a Website. As there is an manifest.json I would assume, it is correctly saved as a PWA.

I started the code from you locally in dev mode ans saved this on my phone aswell. It looked better, but scrolling wise, the text still moves behind the time. But the initial view is correct. I did not change anything on my deployed instance.

Let me know, if I can help further or test some things.

svilenmarkov commented 1 month ago

Hey @adrian-goe, could you please try adding this custom CSS using the custom-css-file property:

@media (display-mode: standalone) {
    .widget-header {
        color: var(--color-negative);
    }
}

body::before {
    content: '';
    height: env(safe-area-inset-top);
    display: block;
    background-color: var(--color-primary);
}

@media (max-width: 1190px) and (display-mode: standalone) {
    .widget::after {
      content: '';
      height: var(--safe-area-inset-bottom);
      display: block;
      background: var(--color-negative);
    }
}

If display-mode: standalone works then the widget titles should be red.

If env(safe-area-inset-top) works then the top of the page (or your status bar) should have a yellow background.

If the previous two as well as env with a default value work then there should be a red block at the bottom of every widget.

You can remove the CSS after that. This should give me some idea about what might not be working. If all 3 of the above work then I'll have to think of something else.