【问题标题】:Nativescript translateY different on Android and iOSNativescript translateY 在 Android 和 iOS 上不同
【发布时间】:2021-04-28 19:42:29
【问题描述】:

我正在 Nativescript-Vue 中创建一个 BottonShet 组件。我遇到的问题如下:

使用 translateY 或动画上传帧在 iOS 和 Android 上的行为不同。

我有一个组件:

在底部表中,我有一个 150 高的元素。如果我申请一个

frame.translateY = Screen.mainScreen.heightDIPs - 150

在 android 中它达到了一个高度,而在 ios 中它达到了另一个。这里发生了什么?如何计算高度,使其在 150 和屏幕高度的所有手机中都相同?

在这个documentation 中,它说动画的平移以 DIP 为单位,因此这应该适用于所有设备。

mentioned tutorial 中,它会根据平台应用一个或另一个高度,我不希望这样,我希望能够计算,所以我不必在所有设备上进行测试.

非常感谢。

【问题讨论】:

    标签: nativescript nativescript-angular nativescript-vue


    【解决方案1】:

    我最近遇到了这个问题,我所做的是获取活动内容高度并用于我的计算,所以现在我可以做frame.translateY = activityHeight - 150

    get activityHeight(): number {
        if(isIOS){
          return Screen.mainScreen.heightDIPs;
        }
        const activity = Application.android.foregroundActivity || Application.android.startActivity;
        if(!activity) return 0;
        const rootView = activity.findViewById(android.R.id.content);
        if(!rootView) return 0;
        return rootView.getHeight() / Screen.mainScreen.scale || 0;
      }
    

    【讨论】:

    • 哦,这使它在 Android 上完美,如果我把 (your method()) - 150 容器上升到它所占据的位置 (150) 但在 iOS 上它仍然不完美,你总是有给它一点我无法计算的。我已经在本地尝试过:CABasicAnimation.animationWithKeyPath,但它也没有达到完美的 150。你知道吗?
    • 对于iOS,您可以附加到layoutChanged 事件,然后通过事件您可以获得该视图的大小,例如event.object.getMeasuredHeight()/Screen.mainScreen.scale(除以比例,因为getMeasuredHeight 应该以像素为单位)你可以尝试将其附加到页面元素或您作为主容器的任何视图
    • 就是这样!由于某些未知原因,iOS Screen.mainScreen.heightDIPs 返回比 this.$refs.page.nativeView.getMeasuredHeight () / Screen.mainScreen.scale 多 50 或 60。非常感谢!我已经用了 2 天了!
    • 如果你同意,你能把它包含在 isIOS 的 if 部分吗?
    • Screen.mainScreen.heightDIPs 应该返回更多,因为它通常会在计算中添加状态栏高度,而且总是建议将 iOS 和 Android 代码分开。如果您使用的是 {N} v7+,请选择全局,因为它现在使用摇树,所以您现在最终的捆绑包应该更小。 ?
    猜你喜欢
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    相关资源
    最近更新 更多