最近回到了RN相关的项目组,又开始了和React-Native相爱相杀的日子。也只有RN,能让我久违的在家捣鼓(jia)技术(ban)

这次又碰到什么问题呢? 一个个来讲。

依赖

首先是老生常谈的依赖安装,npm依赖我就不讲了,遇到的都是常见问题。

这次遇到的是安卓同步gradle的问题

download maven-metadata.xml

卡在了download maven-metadata.xml,一开始以为是网络问题,好,我开全局vpn,我再给你足够的时间(挂机通宵跑),总没问题了吧? 结果早上起来还是熟悉的这行字download maven-metadata.xml。。。。

网上搜了下,有几种方案

  • 用离线模式。

    • 不行,这种解决方案是处理每次都同步的问题,我一次都没同步过,离线模式跑不了。
  • 用aliyun的仓库

    • 不行。同步是成功了,但编译失败。 报错找不到对应文件。
  • 修改maven地址

    • 不行。

最后通过添加--info参数重新同步,发现是拉取友盟的依赖报403,然后把仓库里友盟的maven地址搜索一番,发现友盟换地址了。。 详见友盟公告

所以为什么公司的发版机可以正常发版? 这就是传说中的It works on my machine吗? 或许那台机器不需要同步吧。。

正菜

接上来上正菜,需求呢是做一个类似Dropdown的组件,结果在iOS中做完之后安卓上的效果却拉垮了。

一开始我以为是overflow: visible在安卓下不生效的老问题。后来发现现在可以了,看来RN还是有在进步的。

随后发现是measure返回的数据在Android和iOS下不一致。我的需求是拿到当前View相对父容器的位置

安卓下直接用onLayout中返回的数据就行了。

OK,样式是正常了,但是弹出来的内容无法点击!并且点击会穿透。详见github issue

2年了还没解决。。 让我想起了我18年给RN提的issue也还没解决。。。我收回上面RN在进步的话!!!

其中也提到了一些解决方法,比如用react-native-gesture-handler中的TouchableOpacity替换RN的。

替换中后确实能点了! 但是穿透的问题没有解决。

尝试要把页面中其他的touch组件统一改成使用react-native-gesture-handler可以解决穿透问题。

但是样式却又不行了。即使把style改成了containerStyle。因为页面的布局稍微有些复杂,而且涉及到了Pad宽屏和手机屏幕的自适应,臣妾改不动啊!!

目前想到2个最终方案

  1. 在Dropdown展示菜单的时候,disable掉页面其他的Touchable组件
  2. 采用类似Modal遮罩的方案,在顶层实现我的Dropdown,比如用react-native-root-siblings,而不是用现在的absolute方式(这种方式在web上比较常见)

方案1简单,但是不省事。 所以我大概会用方案2吧~


HaHa
525 声望11 粉丝