Nativescript translateY 在 Android 和 iOS 上不同
Posted
技术标签:
【中文标题】Nativescript translateY 在 Android 和 iOS 上不同【英文标题】:Nativescript translateY different on Android and 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 中,它会根据平台应用一个或另一个高度,我不希望这样,我希望能够计算,所以我不必在所有设备上进行测试.
非常感谢。
【问题讨论】:
【参考方案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+,请选择全局,因为它现在使用摇树,所以您现在最终的捆绑包应该更小。 ?以上是关于Nativescript translateY 在 Android 和 iOS 上不同的主要内容,如果未能解决你的问题,请参考以下文章
带有过渡和 translateY 的 Safari 错误:“跳跃”元素
我应该在移动键盘上方使用媒体查询和转换: translateY(-%) 吗?
transform translateY(-50%) 实现元素垂直居中效果