欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。
根据知识库相关内容,picker-view-column 在 App 平台(特别是 nvue 页面)中存在高度继承问题,导致渲染位置错乱。
问题原因
根据 picker-view-column 文档 说明:
<picker-view /> 的子组件,仅可放置于 <picker-view /> 中,其子节点的高度会自动设置成与 picker-view 的选中框的高度一致。
注意:nvue页面子节点未继承 picker-view 的选中框的高度,需要自己设置高度并居中。
您代码中在 App 平台(#ifdef APP)仅渲染了一个空 view 作为占位:
<view
ref="columnItemRef"
:style="{
height: `${itemHeight * column.length}px`,
}"
android-layer-type="hardware"
></view>
本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent
这会导致 picker-view-column 内部缺少实际的选项节点,或高度计算异常,从而出现位置错乱。
解决方案
-
确保渲染实际内容节点:在 App 平台下也需要遍历渲染具体的选项内容,而不是仅使用空 view 占位。参考官方示例:
<picker-view-column>
<view class="item" v-for="(item,index) in column" :key="index" :style="{height: itemHeight + 'px', lineHeight: itemHeight + 'px'}">
{{item.label}}
</view>
</picker-view-column>
本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent
-
手动设置子节点高度:在 nvue/App 平台中,必须手动为每个子节点设置高度并确保文本居中,因为子节点不会自动继承 picker-view 的选中框高度。
-
避免使用硬件加速层导致的渲染异常:如果使用了 android-layer-type="hardware" 进行性能优化,建议移除该属性测试是否由硬件加速层引起的位置计算错误。
补充说明
在 发布记录 中曾修复过 Web 平台下 picker-view、picker-view-column 值显示错误并额外触发 change 事件的问题,建议确保使用较新版本的 HBuilderX(当前正式版 5.04)。
如果问题仅出现在快手小程序中,需注意 ISSUE 系统 中提到的:在 uni-popup 动画中展示 picker-view 时,需要设置 v-if,确保动画结束再展示组件,否则动态插入的 picker-view 没有高度无法撑开空间。