如何使用Cordova完全隐藏iOS中的状态栏?
我想没有我正在开发的Cordova应用程序的状态栏。 我快到了,状态栏没有显示在启动画面上。 但是,在加载的第一页上,您会看到状态栏的闪烁,然后才会被隐藏。
我已经检查了Xcode中的“隐藏状态栏”复选框。
我已经添加了cordova-plugin-statusbar
插件,并且在deviceready
回调中,我正在调用StatusBar.hide()
。
但是,当启动图像消失并且正在呈现第一页时,在显示页面之前会有一个状态栏闪烁。 它只是一瞬间,但看起来很糟糕。
有人知道如何完全隐藏状态栏,而不是在被隐藏之前闪烁吗?
原始答案
虽然我很晚才回答这个问题,但经过一整天的搜索,我完成了这项工作,所以我想与其他人分享。
根据文档 (和jcesarmobile回答):
躲在启动时
在运行时,您可以使用下面的StatusBar.hide函数,但如果您希望在应用程序启动时隐藏StatusBar,则必须修改应用程序的Info.plist文件。
如果不存在,则添加/编辑这两个属性。 将“状态栏最初隐藏”设置为“是”,并将“查看基于控制器的状态栏外观”设置为“否”。 如果在没有Xcode的情况下手动编辑它,则键和值为:
这需要您在platforms/ios/
文件中修改应用程序的info.plist
文件,以添加以下行:
UIStatusBarHidden UIViewControllerBasedStatusBarAppearance
但不建议这样做,因为这将要求您保存在构建过程后可能会被覆盖的更改。
(如果您使用的是最新的Cordova CLI,请从此处查看更新2)
因此,作为干净的替代方案,您应该使用cordova-custom-config 。 根据文件:
我为什么要用它?
虽然可以通过
config.xml
中的Cordova / Phonegap设置一些平台首选项,但许多(尤其是与较新的平台版本相关的那些)不能。 一种解决方案是手动编辑platforms /目录中的配置文件,但是这不能在多个开发机器或CI环境中维护,后续构建操作可能会覆盖您的更改。此插件尝试通过允许在准备操作完成后设置其他特定于平台的首选项来解决此差距,从而允许覆盖Cordova设置的首选项或设置其他未指定的首选项。 由于自定义首选项已输入
config.xml
,因此可以将它们提交到版本控制,因此可以应用于多个开发计算机,CI环境,并在构建之间进行维护,甚至可以删除并重新添加平台。
现在,您所要做的就是为Cordova应用程序运行以下命令:
cordova plugin add cordova-custom-config --save
并将其添加到
block下的config.xml
文件中:
有关更多信息,请参阅cordova-custom-config (版本> 5)插件
更新1(2018年2月20日)
如果您使用的是cordova-custom-config插件版本<5,则将custom-config-file
标签替换为config-file
。
https://github.com/dpa99c/cordova-custom-config#changes-in-cordova-custom-config5
更新2(2018年7月6日)
从Cordova CLI 6开始 ,您现在不需要安装cordova-custom-config
插件来更改platforms/ios/*-info.plist
文件。 Cordova CLI使用edit-config
标签对其进行内置支持。 所以现在您只需在config.xml
下的
下添加以下内容:
构建Cordova应用程序时,此更改可能会失败,因为它将与platform/ios/ios.json
文件冲突。 要解决此问题,您有两个选项( 参考 ):
选项1(过度杀伤但有效)
重新添加iOS平台:
ionic cordova platform remove ios ionic cordova platform add ios
https://issues.apache.org/jira/browse/CB-13564
选项2(推荐但不适用于我)
在edit-config
文件中使用platform/ios/ios.json
而不是*-Info.plist
。 所以你要添加的最终配置:
然后做:
cordova prepare ios
编辑:
从Cordova CLI 6.5.0开始,您可以使用edit-config
标签在info.plist中编写而无需插件。 这应该在启动时隐藏状态栏
躲在启动时
在运行时,您可以使用下面的StatusBar.hide函数,但如果您希望在应用程序启动时隐藏StatusBar,则必须修改应用程序的Info.plist文件。
如果不存在,则添加/编辑这两个属性。 将“状态栏最初隐藏”设置为“是”,并将“查看基于控制器的状态栏外观”设置为“否”。 如果在没有Xcode的情况下手动编辑它,则键和值为:
UIStatusBarHidden UIViewControllerBasedStatusBarAppearance
使用Cordova检查此插件状态栏自定义
这种方式对我有用:
在您的mac或VM xcode上,选择TARGETS->您的应用程序
然后在INFO菜单上的CUSTOM iOS TARGET PROPERTIES上添加以下新属性:
状态栏最初是隐藏的 – >然后将值设置为YES。
查看基于控制器的状态栏外观 – >然后将值设置为NO
构建,你应该没有状态栏。
printscreen: http : //prntscr.com/fg0jtf
我对android也有同样的问题。 通过从’appCtrl’init()函数调用下面的statusBar()函数解决了这个问题。
希望它适用于iOS。
$rootScope.statusBar = function(){ document.addEventListener("deviceready", onDeviceReady, false); function onDeviceReady() { //console.log(StatusBar); StatusBar.hide(); }