如何在 iOS 应用程序中完全删除 UIStatusBar?

Posted

技术标签:

【中文标题】如何在 iOS 应用程序中完全删除 UIStatusBar?【英文标题】:How to completely remove UIStatusBar in iOS Application? 【发布时间】:2014-05-08 21:52:45 【问题描述】:

我可以隐藏状态栏,但应用程序仍然尊重状态栏的高度(见下图)。我还需要确保在初始加载时状态栏没有“闪烁”,因为它会按下导航菜单按钮并在隐藏时跳回。

我尝试过的方法:

在我的主控制器中添加了以下内容。这会在初始加载时闪烁布局。

// hide the status bar 
ionic.Platform.fullScreen();

在 info.plist 中设置键、值对

<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

相当于:

Status bar is initially hidden = YES
View controller-based status bar appearance = NO

尝试使用 StatusBar plugin 加载:

  .run(function($ionicPlatform) 
    $ionicPlatform.ready(function() 
       // Hide the status bar
       if(window.StatusBar) 
         StatusBar.hide();
       
     );
  )

尝试在我的 MainViewController.m 中设置以下内容

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];

并添加新方法

- (BOOL)prefersStatusBarHidden 
return YES;

我在 github 上尝试了大约 3 个不同的 cordova 插件。

我也是一名网络开发人员,所以在提供涉及更改 obj-c 的答案时,请像我 5 岁一样解释:

http://forum.ionicframework.com/t/how-to-hide-uistatusbar/4025

谢谢!

【问题讨论】:

【参考方案1】:

我在你的帖子上给你留下了评论,但这是我想出的解决方案。

你可以做的是安装闪屏插件

 $ cordova plugin add org.apache.cordova.splashscreen

然后在您的 .run 函数中执行此操作

.run(function ($ionicPlatform, $timeout) 
    $ionicPlatform.ready(function () 
        // Hide the status bar
        if (window.StatusBar) 
            StatusBar.hide();
            $timeout(function () 
                window.navigator.splashscreen.hide();
            , 2500);
        
    );
)

【讨论】:

现在正在执行一个实现,我加载了两个状态栏插件。想知道这是否是问题的一部分。 可能是,我知道 cordova 的插件仓库中有 to 引起了一些混乱。 我应该可以在我的控制台中访问 window.StatusBar 吗?即使安装了插件,我也没有得到任何回报。虽然 window.statusbar 返回一个 Object BarProp visible: true 现在应该可以通过StatusBar 获得window.StatusBar 我安装了启动画面插件并确保我可以访问状态栏,状态栏消失了,但空间仍然存在。和我上面的截图一样。【参考方案2】:

尝试在您的视图控制器中实现 prefersStatusBarHidden。例如

- (BOOL)prefersStatusBarHidden

  return YES;

【讨论】:

这给了我与上图相同的结果。我需要那个粉红色的按钮与顶部齐平。由于某种原因,状态栏被隐藏了,但它的边界仍然受到尊重。我什至尝试过绝对定位左上角的粉色按钮,这在我的本地主机上不是问题,只是在模拟器中。【参考方案3】:

对于ios 7中每个视图的写法:

- (BOOL)prefersStatusBarHidden 

   return YES;

对于 ios 6,在 homeview 或 appdelegate 中写入一次

[UIApplication sharedApplication].statusBarHidden = YES;

【讨论】:

【参考方案4】:

'CDVViewController.m',转到

- (void)viewDidLoad

并在下面插入

[[UIApplication sharedApplication] setStatusBarHidden:YES];

我的 CDVViewController.m 看起来像这样,

- (void)viewDidLoad

    [super viewDidLoad];

    NSURL* appURL = nil;
    NSString* loadErr = nil;
    [[UIApplication sharedApplication] setStatusBarHidden:YES];
.....

【讨论】:

以上是关于如何在 iOS 应用程序中完全删除 UIStatusBar?的主要内容,如果未能解决你的问题,请参考以下文章

iOS:如何从设备中完全删除应用程序以进行调试

如何从设备中完全删除 iOS 应用程序,就好像它从未安装过一样?

如何让 iOS 在 tableView 上显示删除按钮,但不允许从右侧完全滑动删除

在 iOS 13 中停止更改状态栏

在iOS 15中如何重新排列和删除主屏幕页面?

如何使用 Phonegap Build 删除 iOS 状态栏?