以前在做前端H5的过程中,有这样一个场景,展示可以让用户长按识别的一个公众号二维码,页面做出来后测试发现在安卓版微信能正常识别,但ios版微信(iPhone或iPad)皆无法正常识别。出来问题一开头固然是怀疑自己的代码有问题,上网搜索相关资料,尝试以下方案均无法解决:
1、定位方式由absolute改为传统的margin(据说绝对定位会导致这个问题);
2、修改viewport上的maximum-scale大于1(网络上看到的解决方案);
3、网络上有说用position:fixed;定位会导致这个问题,但没有用到这个属性;
后来偶然发现可识别区域恰巧比正常地方稍微往上一点,而“比正常地方稍微往上一点是多少呢?经过多次人工检测,发现上文”比正常地方稍微往上一点“的高度正是微信标题栏+系统状态栏的高度(64px)。基本上可以确定是iOS版微信的本身问题,原因应该是标题栏+系统状态栏的高度,经过与微信ios开发人员的反馈沟通,确定是微信的bug。
解决方案的话有两个:
1.通过img增hpadding 增大可接触面积;这个需要微调。
2.为二维码图片本身增加透明底部背景,类似下图的样子,前端上用户是看不到的;但有个缺点就是如果用户保存二维码后则不是那么好看。
其他老哥的方案
类似等高布局的原理,注意:
1.给你的二维码加上一个巨大的padding:1000px;
2.二维码收起来等值的margin:-1000px;
3.这时候给你的父元素,overflow:hidden 防止布局溢出(看你具体情况)
4.这个时候,你就发现,长按屏幕中任何位置,都可以读取出二维码了
借助padding 可以去实现。margin 做不到
我的方案
<img src="img/erweima.png" class="tan_img" />
<img src="img/erweima.png" class="tan_img ios_ma" />
设置第二个img样式
img.ios_ma{
width: 300px;
height: 300px;
position: absolute;
left:0;
top: -200px;
opacity: 0;
}
完美解决!