Browse Source

Safe area implementation for iOS

Dynamic padding to clear certain iOS UI elements such as the notch, dynamic island and gesture bar, to ensure they don't overlap with our own UI elements.
pull/133/head
Jose Olarte III 4 weeks ago
parent
commit
8e8eef2ab5
  1. 2
      index.html
  2. 17
      src/App.vue
  3. 2
      src/components/QuickNav.vue
  4. 2
      src/components/TopMessage.vue
  5. 2
      src/views/ContactQRScanShowView.vue

2
index.html

@ -3,7 +3,7 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0"> <meta name="viewport" content="width=device-width,initial-scale=1.0,viewport-fit=cover">
<link rel="icon" href="/favicon.ico"> <link rel="icon" href="/favicon.ico">
<title>TimeSafari</title> <title>TimeSafari</title>
</head> </head>

17
src/App.vue

@ -4,7 +4,7 @@
<!-- Messages in the upper-right - https://github.com/emmanuelsw/notiwind --> <!-- Messages in the upper-right - https://github.com/emmanuelsw/notiwind -->
<NotificationGroup group="alert"> <NotificationGroup group="alert">
<div <div
class="fixed top-4 right-4 left-4 sm:left-auto sm:w-full sm:max-w-sm flex flex-col items-start justify-end" class="fixed top-[calc(env(safe-area-inset-top)+1rem)] right-4 left-4 sm:left-auto sm:w-full sm:max-w-sm flex flex-col items-start justify-end"
> >
<Notification <Notification
v-slot="{ notifications, close }" v-slot="{ notifications, close }"
@ -147,7 +147,7 @@
"-permission", "-mute", "-off" "-permission", "-mute", "-off"
--> -->
<NotificationGroup group="modal"> <NotificationGroup group="modal">
<div class="fixed z-[100] top-0 inset-x-0 w-full"> <div class="fixed z-[100] top-[env(safe-area-inset-top)] inset-x-0 w-full">
<Notification <Notification
v-slot="{ notifications, close }" v-slot="{ notifications, close }"
enter="transform ease-out duration-300 transition" enter="transform ease-out duration-300 transition"
@ -539,4 +539,15 @@ export default class App extends Vue {
} }
</script> </script>
<style></style> <style>
#Content {
padding-left: 1.5rem;
padding-right: 1.5rem;
padding-top: calc(env(safe-area-inset-top) + 1.5rem);
padding-bottom: calc(env(safe-area-inset-bottom) + 1.5rem);
}
#QuickNav ~ #Content {
padding-bottom: calc(env(safe-area-inset-bottom) + 6rem);
}
</style>

2
src/components/QuickNav.vue

@ -1,6 +1,6 @@
<template> <template>
<!-- QUICK NAV --> <!-- QUICK NAV -->
<nav id="QuickNav" class="fixed bottom-0 left-0 right-0 bg-slate-200 z-50"> <nav id="QuickNav" class="fixed bottom-0 left-0 right-0 bg-slate-200 z-50 pb-[env(safe-area-inset-bottom)]">
<ul class="flex text-2xl px-6 py-2 gap-1 max-w-3xl mx-auto"> <ul class="flex text-2xl px-6 py-2 gap-1 max-w-3xl mx-auto">
<!-- Home Feed --> <!-- Home Feed -->
<li <li

2
src/components/TopMessage.vue

@ -1,5 +1,5 @@
<template> <template>
<div class="absolute right-5 top-3"> <div class="absolute right-5 top-[calc(env(safe-area-inset-top)+0.75rem)]">
<span class="align-center text-red-500 mr-2">{{ message }}</span> <span class="align-center text-red-500 mr-2">{{ message }}</span>
<span class="ml-2"> <span class="ml-2">
<router-link <router-link

2
src/views/ContactQRScanShowView.vue

@ -78,7 +78,7 @@
If you don't that first, these contacts won't see your activity. If you don't that first, these contacts won't see your activity.
</div> </div>
<div class="text-center my-6"> <div class="text-center mt-6">
<div <div
v-if="isScanning && !isNativePlatform" v-if="isScanning && !isNativePlatform"
class="relative aspect-square overflow-hidden bg-slate-800 w-[90vw] max-w-[40vh] mx-auto" class="relative aspect-square overflow-hidden bg-slate-800 w-[90vw] max-w-[40vh] mx-auto"

Loading…
Cancel
Save