Creeper
Creeper
@tiansh 没有追踪这个了,你如果有空/有意愿,可以在这里补充新情况。
### 3. iOS 进行录音的兼容问题(`getUserMedia` 和 `AudioContext`) 需求是使用Audio API实现录音和上传服务器,在chrome上轻松实现了demo,但是在 iOS 11 上测试时,发现录音无效。 调试,发现 `onaudioprocess` 事件根本没用触发,why? 原因见 一步步调试发现: 1. `onaudioprocess` 必须在 `getUserMedia` 后注册 2. ScriptProcessor (由 `createScriptProcessor` 创建)也不能事先 connect ,要在`getUserMedia` 时connect。
**code point: 码位** **code unit:码元** ## UTF-16 **UTF-16 (16-bit Unicode Transformation Format)** 是Unicode字符编码五层次模型的第三层:字符编码表(Character Encoding Form,也称为"storage format")的一种实现方式。即把Unicode字符集的抽象码位映射为16位长的整数(即码元)的序列,用于数据存储或传递。Unicode字符的码位,需要**1个或者2个16位长的码元**来表示,因此这是一个变长表示。 Unicode的编码空间从U+0000到U+10FFFF,共有1,112,064个码位(code point)可用来映射字符。Unicode的编码空间可以划分为17个平面(plane),每个平面包含216(65,536)个码位。17个平面的码位可表示为从U+xx0000到U+xxFFFF,其中xx表示十六进制值从00(16进制)到10(16进制),共计17个平面。第一个平面称为基本多语言平面(Basic Multilingual Plane, BMP),或称第零平面(Plane 0)。其他平面称为辅助平面(Supplementary Planes)。基本多语言平面内,从U+D800到U+DFFF之间的码位区块是永久保留不映射到Unicode字符。UTF-16就利用保留下来的0xD800-0xDFFF区段的码位来对辅助平面的字符的码位进行编码。 ### 编码规则 #### U+0000 ~ U+D7FF 和...
## ASCII 与 ISO-8859-1 ASCII码是最基础的编码,共定义了128个字符(0-127)。这些字符分为控制字符和可显示字符(26个基本拉丁字母、阿拉伯数目字和英式标点符号)。 ASCII使用了8位2进制,但最高位始终为0,并没有有效利用。而最高位置1,在空置的0xA0-0xFF的范围内,加入96个字母及符号,用以供使用附加符号的拉丁字母语言使用——这就是`ISO-8859-1`编码。 `ISO-8859-1`编码兼容ASCII编码,但因它没有法语使用的 œ、Œ、Ÿ 三个字母及芬兰语使用的 Š、š、Ž、ž ,故于1998年被ISO/IEC 8859-15所取代。 另外,结合UTF8定义,可以看到,UTF8并没有兼容`ISO-8859-1`。
> 感觉上面讲的过于概念化,有时隔一阵来看,自己都觉得太拗口复杂了。 ## 从 `code point` 这个核心点来讲一讲字符编码技术 对 `code point` 大家应该有印象:`String.fromCodePoint` 就是从有序的 code point 序列得到对应的字符串。 ```js String.fromCodePoint(num1[, ...[, numN]]) // ---> characters String.fromCodePoint(0x2F804, 0x30) // "你0" ``` 同时,有个大家更熟悉的类似 API `String.fromCharCode`,从...
### 2. `Android` 上 `overflow` 默认 `hidden` 且无法改变 即超出容器部分被裁切,细节可看[The overflow style property defaults to hidden and cannot be changed on Android](https://facebook.github.io/react-native/releases/0.26/docs/known-issues.html#the-overflow-style-property-defaults-to-hidden-and-cannot-be-changed-on-android)。 iOS 可以支持 `overflow: visible`等其它值,这点需注意。
### 3. `Android` 上字体偏下的问题 第一张是iOS的,第二张是android的,可以看见,第二张的border和文字明显贴的过近。 inspect相应元素,可以发现,是android上文字在垂直方向上偏下。 解决: ```js { paddingBottom: 4, fontSize: 14, lineHeight: 14, height: 14 } ``` 用`paddingBottom`保证不会贴在一起,容忍android上损失一点还原度...
### 4. `TouchableHightlight` 必须注册 `onPress` 回调,否则不显示 `underlayColor` 详情见: https://github.com/facebook/react-native/issues/14908 ```js ``` 如果不注册 `onPress` 回调,`TouchableHighlight`看起来手指按压时无反应,原因即: ```diff _showUnderlay: function() { - if (!this._isMounted || !this._hasPressHandler()) { + if (!this._isMounted) { return; }...
### 5. `flexbox` 实现等宽布局 如下,希望交通工具图标下面的实线/虚线可以等宽,且无法直接设置两者宽度。 一般情况下,好像没什么问题,直接设置`flexGrow`即可。 ```js line: { flexGrow: 1, height: 4, backgroundColor: '#BDC6DB' } ``` 但问题是虚线的实现采用了很 trick 的方法:`line` 内部排列一个个小 `View`,`line` 本身背景色透明。 这时有个严重问题,右侧虚线被撑开了,实现和虚线不再是等分的。 所以,在 dom 内部内容宽度可能很大时,怎么实现等分? ```js line: {...
### 6. Android 上 width 为 `Infinity` 导致的 UI 问题 ```js { list && list.map(v => ( )) } ``` 如上,假设我们有个 `list` 要渲染(`item` 宽度平分 `WIDTH`)。直觉看来上面的没有任何问题,并且在 iOS 上也的确没有任何问题。 但在 Android 上,由于...