跨平台应用开发进阶(十九) :position:fixed 虚拟按键触发后无法生效问题分析及解决方案探究

一、前言

uni-app项目开发过程中,发现虚拟按键触发后导致按钮被顶起,并不满足业务需求。 经检查样式,发现按钮设置的定位方式为固定定位。难道固定定位在此处并未生效?

css 复制代码
.footer {
	position: fixed;
	width: 100%;
	bottom: 0;
	height: 120rpx;
	justify-content: center;
	align-items: center;
	border-top: 1rpx solid #F0F0F0;
	background: #ffffff;
}

二、原因分析及解决措施

出现以上问题的原因是由于虚拟按键弹出时,CSS设置的样式未生效,需要在检测虚拟按键弹出时动态设置按钮样式。

解决思路如下:通过监听虚拟键盘的展示收起,动态控制按钮布局。

首先,初始化数据信息如下:

javascript 复制代码
hideFlag: true,
hideClass: 'hide'

视图渲染部分,应用动态样式设置按钮布局:

html 复制代码
<view class="footer" :class="hideFlag ? hideClass : ''">
	<view @click="btnClick" class="btn" :class="{'btn-disable': btnDisabled}">提交</view>
</view>

虚拟按键监听逻辑如下:

javascript 复制代码
onLoad() {
	uni.onKeyboardHeightChange(res => {
		// 虚拟按键隐藏
		if (res.height === 0) {
		  this.hideFlag = true;
		} else {
			// 虚拟按键弹出
			this.hideFlag = false;
		}
	})
},

CSS样式如下:

css 复制代码
.hide {
	position: fixed;
	bottom: 0;
}

三、延伸阅读 uni-app版本检查弹窗去除

出现原因 :手机端SDK版本和HBuilderX版本不一致。

解决办法

  1. 在项目中找到 manifest.json 配置文件;

  2. 点击源码视图;

  3. 找到 app-plus配置节点;

  4. 找到下面的compatible字段(没有则添加),添加一段忽略提示的代码

    java 复制代码
    "ignoreVersion": true //true表示忽略版本检查提示框,HBuilderX1.9.0及以上版本支持 

完整配置如下:

java 复制代码
"compatible" : {
	"ignoreVersion": true //true表示忽略版本检查提示框,HBuilderX1.9.0及以上版本支持  
},

四、拓展阅读

相关推荐
摆烂大大王1 小时前
玩转 OpenClaw:用 TaskFlow + Heartbeat 打造自动化工作流
前端·人工智能·自动化
zhangxingchao1 小时前
AI 大模型核心六:量化、Workflow 与 Agent、多轮 RAG
前端·人工智能·后端
梦想的颜色2 小时前
TypeScript 完全指南(上):从零开始掌握类型系统
前端·typescript
之歆2 小时前
Day01_ES6+ 专业指南:从基础到实战的现代JavaScript开发(下)
前端·javascript·es6
lichenyang4532 小时前
鸿蒙 MVVM 实战:从 Demo 到工程化,聊聊登录、状态管理与埋点系统设计
前端
IT_陈寒2 小时前
Vite打包时遇到的坑,原来问题出在这里
前端·人工智能·后端
kyriewen3 小时前
AI生成代码快如闪电,但我修了三个小时——它到底帮了谁?
前端·javascript·ai编程
ayqy贾杰3 小时前
基层管理的三板斧,在AI时代行不通了
前端·后端·团队管理
Apifox3 小时前
Apifox 5 月更新|Postman 导入优化、Runner 支持非 root 运行、请求代码自动带鉴权
前端·后端·安全
miaowmiaow4 小时前
PSD2Code 近期更新与深度解析:从设计稿到生产级代码的完整技术栈
前端·人工智能·ai编程