Skip to content
目录

常见问题解答 ​

视图问题 ​


颜色格式问题 ​

Hummer 支持的颜色格式是和前端和 iOS 保持一致的 RGBA 16 进制格式,即 #FF000022,最后的 22 是透明度,这个和 Android 原生支持的 ARGB 颜色格式不一样,需要特别注意。

appendChild 问题 ​

Image、Text、Button 等叶子组件,在 iOS 端是自带有 appendChild 方法的,因为都是继承至 UIView,而 Android 端这些组件不是继承至 View 的,所以没有 appendChild 方法。为了保持两端对齐,我们取了两者的交集,即 Hummer 中的这些叶子组件,是没有 appendChild 等容器组件的方法的。

Text 组件设置空字符串时的高度问题 ​

当 Text 组件设置了空字符串("")时,在 Android 中是占高度的,而在 iOS 中是不占高度的,这点需要特别注意。

Text 组件文本基线对齐问题 ​

当两个不同大小文本的Text组件,水平布局按底部对齐时,内部的文字无法实现基线对齐,原因是目前Text组件文本周围实际上是有一圈自带的padding间隙的,而小文本和大文本的间隙是不一样的,所以基线就会对不齐。

边框绘制不一致 ​

Android 端目前支持绘制单边圆角和边框,并且连接处可以平滑过渡,而 iOS 端目前在绘制单边圆角和边框时,连接处会断开不自然。

子控件超出父容器部分无法响应点击事件 ​

由于端上的点击事件都是由父容器分发给子控件的,如果点击发生在超出父容器部分的子控件上,也就是没有点击在父容器上,那么点击事件就不会传递到子控件上,所以超出部分的子控件是无法响应点击事件的。

滚动组件嵌套滑动冲突问题 ​

目前滚动相关的组件(Scroller、List等)相互嵌套会有滑动冲突的问题。

阴影无法显示(Android) ​

在 Android 端,如果某个控件有设置阴影,而在该控件同一层级上存在 Image、Scroller 或 List 组件的话,阴影会不起作用,会被父容器裁剪掉,原因是由于 Android 端原生 setClipChildren 方法的限制,需要在 Image、Scroller 或 List 组件外再包一层 View 才能解决。

子控件超出父容器部分会被裁剪掉(Android) ​

原因同上。

点击事件穿透问题(Android) ​

Android 端所有视图的点击事件默认行为是会从上层视图穿透到下层视图的,如果想要不穿透,需要在上层视图中添加一个空实现的 tap 点击事件,这样就可以拦截掉点击事件了。iOS 端点击事件默认是不穿透的。

Image 组件加载相对路径图片失败(Android) ​

要使用相对路径图片,需要调用者告诉 Hummer 框架当前执行的 JS 文件的绝对路径,可以在原生侧调用 HummerRender 的 render 方法时,传入第二个参数 sourcePath,并以 file:/// 开头。

父容器边框盖住子控件的问题(iOS) ​

iOS 端父容器边框的层级要比子控件的层级高,导致在绘制容器边框时,如果子控件是超出父容器的,那么父容器的边框会盖住子控件。

背景图片的圆角设置无效(iOS) ​

iOS 端由于背景图片的绘制受系统行为限制,无法和背景颜色一样可以设置圆角,需要特殊处理,目前设置圆角是无效的。

其他问题 ​


子线程回调 JSCallback 出现的 Crash/StackOverflow 问题 ​

JS 只支持单线程运行,目前 Hummer 都在主线程运行 JS,当原生侧某些异步场景下(如网络请求回来后),在子线程中调用 JSCallback 时,在 iOS 端可能会出现 Crash 问题,在 Android 端可能会出现 StackOverflow 问题。

页面跳转后之前注册的回调失效了(Android) ​

这是由于首页的 Hummer 容器,和跳转后的默认 Hummer 容器,一般不是同一个,跳转后的默认 Hummer 容器是 Hummer SDK 自带的 HummerActivity。如果希望跳转后的 Hummer 容器和首页 Hummer 容器公用同一个,需要在 Hummer.init() 时设置自定义路由适配器 NavigatorAdapter 来指定自己的 Hummer 容器。

按 Home 键不触发 onDisappear 生命周期方法(iOS) ​

由于 iOS 系统本身按 Home 键退到后台和打开另一个页面时是不同的生命周期,目前还未处理按 Home 键的生命周期实现。

可选链语法(?.)在 iOS 系统中崩溃(iOS) ​

iOS 端使用的 JS 引擎是系统自带的 JavaScriptCore,在低版本系统中不支持可选链语法(?.),需要替换成标准 ES6 的语法。