当前位置: 首页 > news >正文

微信小程序 安卓/IOS兼容问题

一、背景

在开发微信小程序时,不同的手机型号会出现兼容问题,特此记录一下

二、安卓/IOS兼容问题总结

2.1、new Date()时间转换格式时,IOS不兼容

问题:在安卓中时间格式2024-1-31 10:10:10,但是在iOS中是不支持 "-" 作为日期分隔符

原因:IOS系统及 Safari 不支持YYYY-DD-MM时间格式

解决:将日期中的"-",替换为"/"

 let time = new Date('2022-12-13 19:00'.replace(/-/g,'/'))

2.2、图片格式展示问题

问题:.webp 格式图片在 ios 设备上无法正常显示

原因:IOS系统的原生浏览器Safari不支持.webp格式

解决:将 webp 的后缀名替换为 jpg或png 的后缀名 

img.replace(/\.webp/,'.jpg')

2.3、IOS机型margin属性无效

问题:底部footer设置margin属性时,IOS无效

原因:iOS8后,UiView有个属性 var layoutMargins:UIEdgeinsets,如果一个View是ViewController的rootview,系统会自动设置和管理margins , top和bottom margins被设置为0pt,left和right的值根据当前的 size class 不同而不同,可能取值为16或者20pt(iPhone6 plus, iPad),你不能修改这些值

解决:底部footer加个空盒子div,给height值 

2.4、IOS安全区域适配

问题:在IOS设备上,可以看到物理Home键被取消,改为底部小黑条替代home键功能。微信小程序和 h5 网页需要针对这种情况进行适配,否则可能会遇到底部按钮或选项卡栏与底部黑线重叠的情况

解决:两种方法

方法一:使用微信官方API,wx.getSystemInfo()中的safeArea对象进行适配

# wx.getSystemInfo 对比screenHeight和safeArea.bottom

如果是需要适配的机型,使用safeArea中的bottom,得到安全区域底部纵坐标,然后使用screenHeight减去bottom就能得到小黑条的高度。保存到localstorage里面,全局都可以使用。

方法二:使用苹果官方推出的css函数env()、constant()适配

# css函数env()、constant()适配

env()和constant(),是IOS11新增特性,Webkit的css函数,用于设定安全区域与边界的距离,有4个预定义变量: 

safe-area-inset-left:安全区域距离左边边界的距离
safe-area-inset-right:安全区域距离右边边界的距离
safe-area-inset-top:安全区域距离顶部边界的距离
safe-area-inset-bottom :安全距离底部边界的距离

因为目标是需要对底部小黑条做适配,所以只需要关注safe-area-inset-bottom这个值。

在做屏幕适配时可以这么写

padding-bottom: constant(safe-area-inset-bottom); /*兼容 IOS<11.2*/
padding-bottom: env(safe-area-inset-bottom); /*兼容 IOS>11.2*/

2.5、input输入框在ios中光标及字体不居中

问题:input输入框在ios中光标及字体不居中

原因:iOS 的自动校验功能会对输入内容进行格式化,导致文本显示位置发生偏移。

解决:两种方法

方法一:禁用自动校验功能:将 input 的 type 属性设置为 text 可以禁用 iOS 的自动校验功能,从而解决光标和文本不居中的问题。

方法二:使用 CSS 样式:通过设置 input 的 padding 和 font-size 属性,可以让输入框中的文本垂直居中和水平居中。

input {padding: 10px 0; /* 垂直居中 */font-size: 16px; /* 字体大小 */
}

2.6、iOS使用overflow:auto;滚动会卡顿

解决:-webkit-overflow-scrolling: touch

最后,👏👏 😀😀😀 👍👍     

http://www.lryc.cn/news/292714.html

相关文章:

  • 结构体--共用体--枚举 之难点——链表 奋力学习嵌入式的第十六天
  • 猜凶手
  • python-自动化篇-运维-实现读取日志文件最后一行的时间
  • QT SQL
  • C++(20):通过concept及nlohmann将数据转换为字符串
  • Transformer 自然语言处理(四)
  • BRAIN :帕金森病中与痴呆相关的动态功能连接改变
  • harmony os系统
  • 2024美赛数学建模A题思路源码——七鳃鳗性别比例和生态系统关系
  • C语言的基础学习
  • PostGIS教程学习二十二:使用触发器追踪历史编辑操作
  • 【PTA浙大版《C语言程序设计(第4版)》编程题】练习7-4 找出不是两个数组共有的元素(附测试点)
  • C++面试:数据库不同存储引擎的区别以及如何选择
  • HTML -- 常用标签
  • 【Qt】QInputDialog setGeometry: Unable to set geometry 问题
  • Flink问题解决及性能调优-【Flink rocksDB读写state大对象导致背压问题调优】
  • 代码随想录算法训练营第二十四天|● 理论基础 ● 77. 组合
  • 买保险如何填健康告知
  • 云贝教育 | 【技术文章】Oracle 19c RAC修改网络
  • Android SELinux:保护您的移动设备安全的关键
  • 第十三章认识Ajax(四)
  • 使用 Node.js 和 Cheerio 爬取网站图片
  • 2024美赛数学建模E题思路源码
  • 解决Docker AList本地挂载失效的问题。
  • Emmet常用语法总结
  • Android 12系统源码_页面管理(四)获取系统当前最上层的Activity信息
  • RK3588开发板Ubuntu与开发板使用U盘互传
  • 【BUG】golang gorm导入数据库报错 “unexpected type clause.Expr“
  • TCP/IP网络模型
  • github连不上