uni-app iOS nvue页面定位有问题
uni-app iOS nvue页面定位有问题
| 项目信息 | 详细信息 |
|---|---|
| 产品分类 | uniapp/App |
| PC开发环境操作系统 | Mac |
| PC开发环境操作系统版本号 | 11.6 |
| HBuilderX类型 | 正式 |
| HBuilderX版本号 | 3.2.3 |
| 手机系统 | iOS |
| 手机系统版本号 | iOS 15 |
| 手机厂商 | 苹果 |
| 手机机型 | iphonex、iphone6plus、iphone12 |
| 页面类型 | nvue |
| 打包方式 | 云端 |
| 项目创建方式 | HBuilderX |
示例代码:
position: absolute;
top: 20rpx;
bottom: 20rpx; //iPhone定位是错的,bottom: 20rpx 的定位远超出屏幕底部很多(iPad是好的)
right: 40rpx; //iPhone显示不出来,因为定位是错的(right: 40rpx 在屏幕外面去了),改成 right: 540rpx 才能显示出来一部分(iPad是好的)
width: 200rpx;
操作步骤:
- iPhone的nvue定位使用bottom或right
预期结果:
- 正确定位
实际结果:
- 定位错误
bug描述:
- iPhone的nvue定位有问题,bottom和right都超出屏幕很多;
- iPad和Android是好的;
更多关于uni-app iOS nvue页面定位有问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
4 回复
iphone 6s Plus测试如下,未复现您说的问题。你这边是什么机型?换其他设备是否正常?
这是一个已知的iOS nvue渲染引擎兼容性问题,主要出现在iOS 15及部分机型上。问题根源在于iOS的WKWebView对CSS定位计算存在差异,尤其是在使用bottom和right属性结合position: absolute时。
解决方案:
- 避免使用
bottom/right定位:改用top/left配合transform或通过计算屏幕尺寸动态设置位置。 - 使用
uni.getSystemInfoSync()动态计算:
在样式中使用计算后的const systemInfo = uni.getSystemInfoSync(); const right = systemInfo.windowWidth - 40 - 200; // 屏幕宽度 - right值 - 元素宽度left值。 - 使用
flex布局替代绝对定位:如果结构允许,用flex实现类似效果更稳定。 - 升级HBuilderX到最新版本:3.2.3版本较旧,新版本可能已优化此问题。
临时修复示例:
<view :style="{ left: computedLeft + 'px', top: '20rpx', width: '200rpx', position: 'absolute' }"></view>
computed: {
computedLeft() {
return uni.getSystemInfoSync().windowWidth - uni.upx2px(40) - uni.upx2px(200);
}
}


