iOS黑屏是启动图缺失时的默认行为,需配置合规启动图并用plus.navigator.closeSplashscreen()控制退场;manifest.json中设autoclose:false、alwaysShowBeforeRender:false、waiting:false;App.vue的onLaunch中setTimeout调用关闭,时长1500–6000ms;资源须含三档尺寸图,Storyboard中ImageView设Aspect Fit与纯色背景;page{background-color:#FFFFFF}防白屏;改后须重新制作离线包真机测试。

黑屏不是 bug,是 iOS 启动流程里「无图可显」时的默认 fallback 行为。核心解法就两条:给系统一张合规的启动图(Launch Screen),再用代码精准控制它何时退场。
manifest.json 的 splashscreen 配置别信“delay”字段
新版 HBuilderX(≥4.20)已废弃 splashscreen.delay,设了也无效。真正起作用的是 autoclose 和 alwaysShowBeforeRender 这两个开关:
-
autoclose必须设为false,否则系统会在首页 JS 渲染完成瞬间强制关掉启动图——你根本来不及控制时间 -
alwaysShowBeforeRender建议设为false,避免首页白屏闪一下才出内容 -
waiting设为false可隐藏那个旋转小圈,更干净
正确配置示例(manifest.json 的 app-plus 节点下):
"splashscreen": {
"autoclose": false,
"alwaysShowBeforeRender": false,
"waiting": false
}
App.vue 中用 plus.navigator.closeSplashscreen() 主动关闭
必须在 onLaunch 里用 setTimeout 控制关闭时机,不能写在 onShow 或页面生命周期里——那时启动图早被系统干掉了。
- 最短建议 1500ms,太短用户会感觉“一闪而过”,失去过渡感
- 最长不要超 6000ms,iOS 系统有硬性超时机制,到点自动关,且不再触发你的回调
- 务必包在
#ifdef APP-PLUS条件编译里,否则 H5 或小程序会报plus is not defined
示例代码(App.vue):
onLaunch() {
// #ifdef APP-PLUS
setTimeout(() => {
plus.navigator.closeSplashscreen();
}, 2500);
// #endif
}
iOS 启动图资源本身必须合规
只配 JSON 不管用,Xcode 里没图或尺寸错,照样黑屏。关键点:
- HBuilderX 中上传的 iOS 启动图,必须包含
750x1624(iPhone X+)、1242x2688(iPhone XS Max)、1125x2436(iPhone X)三档,缺一不可 - 不能只传一张图然后靠拉伸填充——iOS Launch Screen.storyboard 默认用的是约束布局,图片拉伸会导致模糊或偏移
- 如果用自定义
LaunchScreen.storyboard(推荐),确保里面UIImageView的Content Mode设为Aspect Fit,且背景色设为纯色(如#FFFFFF)
page{background-color} 是防白屏的最后一道保险
即使启动图关了、首页 JS 开始执行,若 App.vue 或首页没设背景色,WebView 初始渲染前仍会透出白色底——看起来像“二次黑屏/白屏”。
- 在
App.vue的<style></style>里加这条全局样式即可:
page {
background-color: #FFFFFF;
}
注意:这里用 page 选择器,不是 body 或 view;颜色值必须是十六进制,white 或 rgb() 在部分 iOS 版本上不生效。
最容易被忽略的是:改完 manifest.json 或 App.vue 后,必须重新「发行 → 原生App-制作离线包」并用真机测试,模拟器和热更新都不走这套启动流程。


















