Ionic Cordova - iOS 12 和 13 将页脚按钮推到安全区域之外

Ionic Cordova - iOS 12 and 13 pushing footer buttons beyond safe area

我有一个用 Ionic v1、Cordova 和 AngularJS 1.5.3 编写的应用程序。

我遇到的问题根本不会出现在 Android 设备上。

iPhones 测试:iPhone SE、iPhone 8、iPhone X 和 iPhone XR。

For iOS 13.6 the problem occurs on: iPhone SE, iPhone 8, iPhone X, and iPhone XR.
iPhone X, and iPhone XR ( completely pushes the buttons out of view )

For iOS 12 the problem occurs on:

iPhone XR - somewhat occurs
iPhone 8 - does not occur
iPhone SE - does not occur
iPhone X - somewhat occurs

For iOS 11:
it does not occur on iPhone 8. There are no problems.
iPhone SE - no problems
It somewhat occurs on the iPhone X.
iPhone XR does not run iOS 11.

随着iOS版本的增加,好像效果越来越好

我的代码在做什么:

我的页面供用户输入缺席,他们可以选择添加照片附件。 附件将作为离子项目添加到我的离子列表中。

我有一个离子视图和一个带有按钮的页脚。当我将一个离子项目添加到我的离子列表时,它似乎将页脚按钮向下推出“安全区域”并且它会永久地这样做。

即使我转到另一个页面并再次返回,问题仍然存在。它似乎还会永久影响我应用程序不同页面上的“安全区域”。

问题: 随着附件列表的增长,它会将页脚按钮向下推出安全区域

如何在最新版本的 iOS 上将我的按钮放在页脚中?

代码片段:

<ion-view left-buttons="leftButtons" cache-view="false" right-buttons="rightButtons">

    <ion-nav-buttons side="right">
        <button menu-toggle="right" class="button button-icon icon ion-home" ui-sref="main.home"
            automation-id="RIGHT_NAV_HOME_BUTTON">
        </button>
    </ion-nav-buttons>

    <ion-content class="has-header has-footer bg-stable" padding="false">

        <ion-list can-swipe="true">

            <div class="item title-bar">
                <h2 class="dark" ng-i18next="BOOK_ABSENCE"></h2>
            </div>

            <div class="item item-icon-left" ng-click="setDate('startDate')">
                <i class="icon ion-ios-calendar-outline"></i>
                <span ng-i18next="START_DATE"></span>
                <span class="item-note">{{ data.startDate | dateFormat }}</span>
            </div>

            <div class="item item-icon-left" ng-click="setDate('endDate')">
                <i class="icon ion-ios-calendar"></i>
                <span ng-i18next="END_DATE"></span>
                <span class="item-note">{{ data.endDate | dateFormat }}</span>
                <i class="icon ion-ios-arrow-right"></i>
            </div>

            <div class="item item-divider"></div>

            <label class="item item-input">
                <textarea placeholder="Comments" ng-model="data.comments" rows="4"></textarea>
            </label>

            <div class="item item-divider"></div>

            <ion-item class="flex-container-center" ng-repeat="attachment in attachments">
                <div class="flex-item-1">
                    <img ng-src="data:{{ attachment.mediaTypeField }};base64,{{ attachment.imageDataField }}">
                </div>
                <div class="flex-item-big">
                    <div>{{ attachment.filename }}</div>
                </div>
            </ion-item>

        </ion-list>

    </ion-content>

    <div class="bar bar-footer no-padding bg-bottom">
        <div class="button-bar">
            <button class="button button-positive" ng-click="book()">
                <span ng-i18next="SAVE"></span>
            </button>
        </div>
    </div>

</ion-view>

环境:

ionic info

Ionic:

   ionic (Ionic CLI) : 4.10.3 (C:\Users\User\node_modules\ionic)
   Ionic Framework   : ionic1 1.3.5
   @ionic/v1-toolkit : 1.0.22

Cordova:

   cordova (Cordova CLI) : 8.1.2 (cordova-lib@8.1.1)
   Cordova Platforms     : android 8.1.0, ios 6.1.0, browser 5.0.4, windows 4.4.3
   Cordova Plugins       : cordova-plugin-ionic-webview 4.1.3, (and 17 other plugins)

System:

   Android SDK Tools : 26.1.1 (C:\Users\User\Documents\Android\sdk)
   NodeJS            : v10.21.0 (C:\Program Files\nodejs\node.exe)
   npm               : 6.14.4
   OS                : Windows 10

以前,新的iPhoneX出来了,我加了一些代码,对“安全区”做了调整。

css

body {
    padding: constant(safe-area-inset-top) constant(safe-area-inset-right) constant(safe-area-inset-bottom) constant(safe-area-inset-left); //iOS 11.2
    padding: env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);
}

html

<meta name="viewport" content="viewport-fit=cover, width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">

因为我使用的是 cordova-ios 6.1.0,所以我只使用 WkWebView。

<platform name="ios">
    <preference name="WKWebViewOnly" value="true" />

事实证明,env() 计算仅在应用首次加载时才可靠。当我们打开相机小部件时,我们在技术上离开了应用程序,当我们回来时,env() 被再次计算,它给出了一个我们不想要的值。

为了解决这个问题,我将顶部填充设置为零。

body {
    padding: 0 constant(safe-area-inset-right) constant(safe-area-inset-bottom) constant(safe-area-inset-left); //iOS 11.2
    padding: 0 env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);
}

我们已经在 HTML 中设置了视口覆盖物,所以我们在安全区域方面做得很好。