From 3f7673f0f5d679fb1e24f273ebb043519efaad07 Mon Sep 17 00:00:00 2001 From: qiang Date: Tue, 13 Oct 2020 11:14:10 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=20picker=20=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=EF=BC=88pickTime=E3=80=81pickDate=EF=BC=89=E5=9C=A8?= =?UTF-8?q?=20iPad=20=E4=B8=8A=E7=9A=84=E6=98=BE=E7=A4=BA=E4=BD=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/platforms/app-plus/helpers/status-bar.js | 4 ++++ .../app-plus/service/api/device/system.js | 9 ++++---- src/platforms/app-plus/service/api/util.js | 7 +----- src/platforms/app-plus/service/constants.js | 4 +--- .../service/framework/plugins/lifecycle.js | 15 ++++++------ .../webview/parser/sub-nvue-parser.js | 10 +++----- .../app-plus/view/components/picker/index.vue | 23 +++++++++++++------ .../view/components/web-view/index.vue | 7 ++++-- src/platforms/app-plus/view/mixins/native.js | 17 +------------- src/platforms/app-plus/view/utils.js | 13 +++++++++++ 10 files changed, 55 insertions(+), 54 deletions(-) create mode 100644 src/platforms/app-plus/helpers/status-bar.js create mode 100644 src/platforms/app-plus/view/utils.js diff --git a/src/platforms/app-plus/helpers/status-bar.js b/src/platforms/app-plus/helpers/status-bar.js new file mode 100644 index 000000000..2acad4285 --- /dev/null +++ b/src/platforms/app-plus/helpers/status-bar.js @@ -0,0 +1,4 @@ +export function getStatusbarHeight () { + // 横屏时 iOS 获取的状态栏高度错误,进行纠正 + return plus.navigator.isImmersedStatusbar() ? Math.round(plus.os.name === 'iOS' ? plus.navigator.getSafeAreaInsets().top : plus.navigator.getStatusbarHeight()) : 0 +} diff --git a/src/platforms/app-plus/service/api/device/system.js b/src/platforms/app-plus/service/api/device/system.js index 12b2bc12a..ba307265d 100644 --- a/src/platforms/app-plus/service/api/device/system.js +++ b/src/platforms/app-plus/service/api/device/system.js @@ -2,16 +2,15 @@ import { callApiSync, isTabBarPage, getLastWebview, - getStatusbarHeight, getScreenInfo } from '../util' -import { - TITLEBAR_HEIGHT -} from '../../constants' +import { NAVBAR_HEIGHT } from 'uni-helpers/constants' import tabBar from '../../framework/tab-bar' +import { getStatusbarHeight } from 'uni-platform/helpers/status-bar' + export function getSystemInfoSync () { return callApiSync(getSystemInfo, Object.create(null), 'getSystemInfo', 'getSystemInfoSync') } @@ -35,7 +34,7 @@ export function getSystemInfo () { let style = webview.getStyle() style = style && style.titleNView if (style && style.type && style.type !== 'none') { - titleNView.height = style.type === 'transparent' ? 0 : (statusBarHeight + TITLEBAR_HEIGHT) + titleNView.height = style.type === 'transparent' ? 0 : (statusBarHeight + NAVBAR_HEIGHT) titleNView.cover = style.type === 'transparent' || style.type === 'float' } safeAreaInsets = webview.getSafeAreaInsets() diff --git a/src/platforms/app-plus/service/api/util.js b/src/platforms/app-plus/service/api/util.js index 764e7d661..17f2fe687 100644 --- a/src/platforms/app-plus/service/api/util.js +++ b/src/platforms/app-plus/service/api/util.js @@ -154,11 +154,6 @@ const outOfChina = function (lng, lat) { return (lng < 72.004 || lng > 137.8347) || ((lat < 0.8293 || lat > 55.8271) || false) } -export function getStatusbarHeight () { - // 横屏时 iOS 获取的状态栏高度错误,进行纠正 - return plus.navigator.isImmersedStatusbar() ? Math.round(plus.os.name === 'iOS' ? plus.navigator.getSafeAreaInsets().top : plus.navigator.getStatusbarHeight()) : 0 -} - export function getScreenInfo () { const { resolutionWidth, resolutionHeight } = plus.screen.getCurrentSize() return { @@ -210,4 +205,4 @@ export function warpPlusMethod (origin, name, before) { export function getFileName (path) { const array = path.split('/') return array[array.length - 1] -} +} diff --git a/src/platforms/app-plus/service/constants.js b/src/platforms/app-plus/service/constants.js index 1a9b7d683..4075aa3fc 100644 --- a/src/platforms/app-plus/service/constants.js +++ b/src/platforms/app-plus/service/constants.js @@ -5,8 +5,6 @@ export const ANI_DURATION = 300 export const ANI_CLOSE = downgrade ? 'slide-out-right' : 'pop-out' -export const TITLEBAR_HEIGHT = 44 - export const ON_REACH_BOTTOM_DISTANCE = 50 export const VIEW_WEBVIEW_PATH = '_www/__uniappview.html' @@ -19,4 +17,4 @@ export const V_SHOW = 'v-show' export const B_CLASS = 'c' export const B_STYLE = 's' -export const S_CLASS = 'sc' +export const S_CLASS = 'sc' diff --git a/src/platforms/app-plus/service/framework/plugins/lifecycle.js b/src/platforms/app-plus/service/framework/plugins/lifecycle.js index 1975bea46..adcd26df1 100644 --- a/src/platforms/app-plus/service/framework/plugins/lifecycle.js +++ b/src/platforms/app-plus/service/framework/plugins/lifecycle.js @@ -21,16 +21,15 @@ import { } from '../../../constants' import { - ON_REACH_BOTTOM_DISTANCE, - TITLEBAR_HEIGHT + ON_REACH_BOTTOM_DISTANCE } from '../../constants' +import { NAVBAR_HEIGHT } from 'uni-helpers/constants' + import tabBar from '../tab-bar' -import { - getStatusbarHeight -} from '../../api/util' +import { getStatusbarHeight } from 'uni-platform/helpers/status-bar' import { preloadSubPackages @@ -58,7 +57,7 @@ function parsePageCreateOptions (vm, route) { onReachBottomDistance, statusbarHeight, windowTop: windowOptions.titleNView && windowOptions.titleNView.type === 'float' ? (statusbarHeight + - TITLEBAR_HEIGHT) : 0, + NAVBAR_HEIGHT) : 0, windowBottom: (tabBar.indexOf(route) >= 0 && tabBar.cover) ? tabBar.height : 0 } } @@ -108,9 +107,9 @@ export function initLifecycle (Vue) { }, mounted () { if (this.mpType === 'page') { - callPageHook(this.$scope, 'onReady') + callPageHook(this.$scope, 'onReady') preloadSubPackages(this.$scope.route) } } }) -} +} diff --git a/src/platforms/app-plus/service/framework/webview/parser/sub-nvue-parser.js b/src/platforms/app-plus/service/framework/webview/parser/sub-nvue-parser.js index e7e756da3..adb04cf5e 100644 --- a/src/platforms/app-plus/service/framework/webview/parser/sub-nvue-parser.js +++ b/src/platforms/app-plus/service/framework/webview/parser/sub-nvue-parser.js @@ -1,6 +1,4 @@ -import { - TITLEBAR_HEIGHT -} from '../../../constants' +import { NAVBAR_HEIGHT } from 'uni-helpers/constants' import { backbuttonListener @@ -10,9 +8,7 @@ import { isTabBarPage } from '../../../bridge' -import { - getStatusbarHeight -} from '../../../api/util' +import { getStatusbarHeight } from 'uni-platform/helpers/status-bar' import tabBar from '../../tab-bar' @@ -100,7 +96,7 @@ function initSubNVue (subNVue, routeOptions, webview) { style.dock = 'top' style.top = 0 style.width = '100%' - style.height = TITLEBAR_HEIGHT + getStatusbarHeight() + style.height = NAVBAR_HEIGHT + getStatusbarHeight() delete style.left delete style.right delete style.bottom diff --git a/src/platforms/app-plus/view/components/picker/index.vue b/src/platforms/app-plus/view/components/picker/index.vue index 0ee4a82db..911ba86c5 100644 --- a/src/platforms/app-plus/view/components/picker/index.vue +++ b/src/platforms/app-plus/view/components/picker/index.vue @@ -11,6 +11,7 @@ import { emitter } from 'uni-mixins' import { showPage } from './page' import * as webview from './webview' +import { getNavigationBarHeight } from '../../utils' const mode = { SELECTOR: 'selector', @@ -198,17 +199,23 @@ export default { } } }, - _show () { + _show (event) { if (this.disabled) { return } + const rect = event.currentTarget.getBoundingClientRect() this._showPicker(Object.assign({}, this.$props, { value: this.valueSync - })) + }), { + top: rect.top + getNavigationBarHeight(), + left: rect.left, + width: rect.width, + height: rect.height + }) }, - _showPicker (data) { + _showPicker (data, popover) { if ((data.mode === mode.TIME || data.mode === mode.DATE) && !data.fields) { - this._showNativePicker(data) + this._showNativePicker(data, popover) } else { data.fields = Object.values(fields).includes(data.fields) ? data.fields : fields.DAY webview.exists((exists) => { @@ -216,7 +223,7 @@ export default { }) } }, - _showNativePicker (data) { + _showNativePicker (data, popover) { plus.nativeUI[this.mode === mode.TIME ? 'pickTime' : 'pickDate']((res) => { const date = res.date this.$trigger('change', {}, { @@ -225,11 +232,13 @@ export default { }, () => { this.$trigger('cancel', {}, {}) }, this.mode === mode.TIME ? { - time: getDate(this.value, mode.TIME) + time: getDate(this.value, mode.TIME), + popover } : { date: getDate(this.value, mode.DATE), minDate: getDate(this.start, mode.DATE), - maxDate: getDate(this.end, mode.DATE) + maxDate: getDate(this.end, mode.DATE), + popover }) }, _showWeexPicker (data) { diff --git a/src/platforms/app-plus/view/components/web-view/index.vue b/src/platforms/app-plus/view/components/web-view/index.vue index 1744fe6fc..5ec461d28 100644 --- a/src/platforms/app-plus/view/components/web-view/index.vue +++ b/src/platforms/app-plus/view/components/web-view/index.vue @@ -6,6 +6,9 @@ import { WEBVIEW_INSERTED, WEBVIEW_REMOVED } from '../../../constants' + +import { NAVBAR_HEIGHT } from 'uni-helpers/constants' + let webview = false const insertHTMLWebView = ({ htmlId @@ -19,9 +22,9 @@ const insertHTMLWebView = ({ const parentTitleNView = parentWebview.getTitleNView() if (parentTitleNView) { if (plus.navigator.isImmersedStatusbar()) { - styles.top = 44 + plus.navigator.getStatusbarHeight() + styles.top = NAVBAR_HEIGHT + plus.navigator.getStatusbarHeight() } else { - styles.top = 44 + styles.top = NAVBAR_HEIGHT } styles.bottom = 0 } diff --git a/src/platforms/app-plus/view/mixins/native.js b/src/platforms/app-plus/view/mixins/native.js index b2fe601b2..c01d683e6 100644 --- a/src/platforms/app-plus/view/mixins/native.js +++ b/src/platforms/app-plus/view/mixins/native.js @@ -1,19 +1,4 @@ -const TITLEBAR_HEIGHT = 44 - -function getStatusbarHeight () { - // 横屏时 iOS 获取的状态栏高度错误,进行纠正 - return plus.navigator.isImmersedStatusbar() ? Math.round(plus.os.name === 'iOS' ? plus.navigator.getSafeAreaInsets().top : plus.navigator.getStatusbarHeight()) : 0 -} - -function getNavigationBarHeight () { - const webview = plus.webview.currentWebview() - let style = webview.getStyle() - style = style && style.titleNView - if (style && style.type === 'default') { - return TITLEBAR_HEIGHT + getStatusbarHeight() - } - return 0 -} +import { getNavigationBarHeight } from '../utils' function getFixed ($el) { let fixed diff --git a/src/platforms/app-plus/view/utils.js b/src/platforms/app-plus/view/utils.js new file mode 100644 index 000000000..eef6a5897 --- /dev/null +++ b/src/platforms/app-plus/view/utils.js @@ -0,0 +1,13 @@ +import { getStatusbarHeight } from 'uni-platform/helpers/status-bar' + +import { NAVBAR_HEIGHT } from 'uni-helpers/constants' + +export function getNavigationBarHeight () { + const webview = plus.webview.currentWebview() + let style = webview.getStyle() + style = style && style.titleNView + if (style && style.type === 'default') { + return NAVBAR_HEIGHT + getStatusbarHeight() + } + return 0 +} -- GitLab