uniapp打包后在ios问题盘点

0 阅读2分钟

在安卓上运行正常,ios启动后就白屏以及后续一些问题

1. css gap属性失效

解决办法一:使用display:grid 布局后再使用gap可以生效; 解决办法二:子元素设置margin-bottom:16px; 父元素:margin-bottom:-16px;

2. flex布局后,子元素高度塌陷

原因:可能是子元素高度超过了父元素,从而触发塌陷 解决办法:给子元素加上flex-shrink:0;

3. ??(空值合并运算符)

JavaScript 中的  ??(空值合并运算符)  是 ES2020 引入的特性,用于判断左侧值是否为 null 或 undefined,如果是则返回右侧的默认值,否则返回左侧的值。例如:const value = a ?? 'default'


iOS/Safari 兼容性

?? 的兼容性取决于 iOS 系统内置的 Safari 浏览器版本:

  • iOS ≥ 14.5(对应 Safari ≥ 14.1): ✅ 原生支持 ??
  • iOS < 14.5: ❌ 不支持 ??,会抛出语法错误。

解决方法:

const test = obj ?? {};

// 替换为
const test = obj ? obj : {};

4. JavaScript 中的 零宽断言(如先行/后行断言)在 iOS 上的兼容性主要取决于 Safari 的版本

兼容性概况

先行断言(Lookaheads)

-   `(?=...)`(正向)和 `(?!...)`(负向)
-   **全版本兼容**:自 ES3 起支持,所有 iOS/Safari 版本均支持。

后行断言(Lookbehinds

-   `(?<=...)`(正向)和 `(?<!...)`(负向)
-   **iOS ≥16.4 (Safari 16.4+)** :完全支持(ES2018 特性)。
-   **iOS <16.4**:会抛出语法错误,导致正则表达式失效。

具体案例:处理后端返回的富文本数据中标签之间的空格问题:

// 正则表达式
// 
这个正则表达式使用了正向零宽断言(lookahead)和负向零宽断言(lookbehind)来匹配<ul>、<li>等标签的空格
const regex = 
/(?<=<ul>)\s*(?=<li>)|(?<=</li>)\s*(?=<li>)|(?<=</li>)\s*(?=</ul>)/g

解决的方法:避免使用后行断言方式

// 清理ul li标签之间的所有空白(包括换行、空格等)
html = html.replace(/(<ul>)\s+(<li>)/gi, '$1$2');   // </ul>与<li>之间
html = html.replace(/(</li>)\s+(<li>)/gi, '$1$2');   // </li>与<li>之间
html = html.replace(/(</li>)\s+(</ul>)/gi, '$1$2');  // </li>与</ul>之间

5. 在部分比较老的机型上(iphone6,7)等页面使用z-index时未按预期工作

解决办法:使用transform: translateZ(0) 强制硬件加速,在移动设备上,特别是iOS老机型,可以显著提升动画和渲染性能