iOS上小程序开发踩的一些坑

        用react写的webview,在适配小程序的时候遇到很多比较麻烦的问题,大多是出在UI上面,导致UI还原度极低;花时间解决之后总结了一下踩得一些坑。

        1.iOS小程序中,部分盒子出现0.5px的边框缺失的问题。

        由网上大家踩的坑总结,当盒子高度为奇数时,更容易出现上下边框的缺失,当宽度为奇数的时候,更容易出现左右边框的缺失。究其本质则是在iOS上,盒子宽高会影响0.5px的取整方向。解决方案主要就是添加伪类,或者scale缩放,我是给有边框的类加上了transform: rotateZ(360deg),比较方便,基本上解决了问题。

        还有解决方案,比较玄学

border: 1px solid;
border-image: linear-gradient(90deg, rgba(147, 104, 59, 0.1), rgba(179, 141, 91, 1), rgba(197, 161, 109, 0.1)) 1 1;

         按这个顺序,能在原本显示失败的地方展示出边框,具体原因还没搞清楚。

  2.与底部的间距。

        众所周知,在iOS11及以上的设备,iOS系统为了适配底部灵动性,加上了一个小横条。为了适配这个小横条,需要对11以上机型统一做处理。

@media only screen and (device-width: 390px) and (device-height: 844px) 
and (-webkit-device-pixel-ratio: 3)

        可以用上述代码一个个对iOS机型进行适配。但是,需要注意的是,小程序上的webview底部的间距,不单是由webview所定义,还有iOS11以上的机型所带的安全距离。

        另外,在使用position:fixed固定底部按钮位置的时候,需要注意的是父元素的overflow是否一致,因为fixed本质上是相对最近的带滚动条的父元素的位置进行定位。如果连续两个二级页面的overflow不一致,会导致用fixed固定的按钮位置不一致。

        3.图片长按保存的问题

        在小程序上,其实不止iOS会出现图片可以被长按保存或分享的问题,不过这也是遇到的坑,所以记录在一起。解决方案也很简单,给图片加上一个蒙层,将原本的事件绑定到图片外面一层的父元素机壳解决。或者直接给图片加上point-events:none,避免一切图片的事件触发。

        4.iOS弹簧属性,小程序上webview内的页面在iOS设备上可被拖动,出现白顶白底。

        如果需要不被拖动,在较短的页面可以通过固定body和HTML实现。APP上也是同理

/* iOS设备弹簧属性,导致页面整体可被拖动。给body和HTML固定解决。 */
body, html{
    position: fixed;
    top: 0;
    left: 0;
}

       拖动展示的白顶和白底按理来说由小程序开发尝试解决,webview中暂未找到解决方法。

        5.同样不是iOS独有,但是也遇到了,onclick和ontouchend的问题

        onclick在执行顺序上是晚于ontouchend的,也就是说,如果叠加着的元素分别设置了onclick和ontouchend,会使ontouchend的元素消失后,再触发下面的onclick,非常影响滑动的设置。

        可以考虑给element元素加上preventdefault,避免默认事件。

a.addEventListener("click",function(event){
    event.preventDefault();
	location.href = "//www.baidu.com";
});

        或者给事件加上延时,避免触发onclick。

        6.iPhone11Pro颜色丢失的问题

        在正常情况下,给盒子加上背景颜色,盒子里的内容的底色不设置,子元素的底色会继承父元素的颜色。但在iPhone11Pro上,我遇到了一个奇怪的问题,设置了黑色底色的盒子,底色仍然全白。一开始以为是层级问题,被挡住了;反复试验之后发现,层级不影响,解决方案只要给最里面需要的子元素加上颜色,就能正常展示。其他IPhone手机均无复现,考虑是兼容性问题。

        还有两个问题还没找到解决方案,一个是在可滑动区域,iOS设备概率滑动失效,猜测是滑动操作被认为是执行其他的滑动,导致在页面展示失效;另一个是引用地图AMapLoader from '@amap/amap-jsapi-loader',点击后地图上的marker展示时间极短。

  • 27
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值