uni-app 红米Note7Pro给web-view设置相对定位(随窗口滚动)无效
uni-app 红米Note7Pro给web-view设置相对定位(随窗口滚动)无效
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | win10 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Windows
HBuilderX类型:正式
HBuilderX版本号:3.2.3
手机系统:Android
手机系统版本号:Android 10
手机厂商:小米
手机机型:红米note 7 rop
页面类型:vue
打包方式:云端
示例代码:
<template>
<view class="body">
<view>我是背景1</view>
<view>我是背景2</view>
<view>我是背景3</view>
<view>我是背景4</view>
<view>我是背景5</view>
<view>我是背景6</view>
<view>我是背景7</view>
<web-view src="https://baidu.com"></web-view>
</view>
</template>
<script>
export default{
data(){return {}},
methods: {
},
onLoad:function(options){
},
onReady(){
var wv = this.$scope.$getAppWebview().children()[0]
wv.setStyle({
height: 300,
top: 100,
position: 'static'//窗口随着滚动条滚动,默认为绝对定位
})
}
}
</script>
<style>
.body{
height: 200vh;
}
view{
height: 30vh;
color: #FFF;
}
view:nth-of-type(1){background: black;}
view:nth-of-type(2){background: red;}
view:nth-of-type(3){background: blue;}
view:nth-of-type(5){background: white;}
view:nth-of-type(4){background: grey;}
view:nth-of-type(6){background: yellow;}
view:nth-of-type(7){background: black;}
</style>
操作步骤:
直接将demo运行到红米 7 note pro中。MIUI版本是12.5.1
预期结果:
窗口随着页面滚动
实际结果:
在红米 7 note pro中,frame不会随着窗口滚动
bug描述:
页面中创建web-view标签。用js修改窗口的position(排版位置)为static(控件在页面中正常定位,如果页面存在滚动条则随窗口内容滚动)无效。 ios 6 plus可以。
如果web-view窗口是通过 plus.webview.create 创建的。则没有bug。但是窗口是通过<web-view></web-view>标签创建的。则有bug
更多关于uni-app 红米Note7Pro给web-view设置相对定位(随窗口滚动)无效的实战教程也可以访问 https://www.itying.com/category-93-b0.html
2 回复
真没人处理bug是吧
更多关于uni-app 红米Note7Pro给web-view设置相对定位(随窗口滚动)无效的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这是一个已知的uni-app在Android平台上的web-view定位问题。问题核心在于通过标签创建的web-view在Android上默认使用原生WebView组件,其定位行为与iOS存在差异。
问题分析:
- 平台差异:iOS的web-view支持
position: 'static'设置,能正常随页面滚动。但Android原生WebView在部分机型上(特别是小米MIUI系统)对position属性的支持不完整。 - 创建方式差异:通过
plus.webview.create()创建的web-view使用的是5+ Runtime的渲染机制,而标签创建的是原生组件,两者底层实现不同。
解决方案:
- 使用fixed定位替代(推荐):
wv.setStyle({
height: 300,
top: 100,
position: 'fixed'
})
然后在页面滚动时通过JS动态计算并更新top值,模拟相对定位效果。
- 改用plus.webview.create创建: 既然你提到这种方式没有bug,可以考虑在需要相对定位的场景下使用API创建:
var wv = plus.webview.create('https://baidu.com', 'webview', {
top: '100px',
height: '300px',
position: 'static'
})

