用自己的视图替换状态栏

Posted

技术标签:

【中文标题】用自己的视图替换状态栏【英文标题】:Replace status bar with own view 【发布时间】:2014-03-19 18:12:31 【问题描述】:

我想用我自己的视图替换我应用中的 UIStatusBar。

我假设我需要隐藏状态栏 - 对吗?

隐藏状态栏的问题是导航栏向上移动以占据它的原始位置。如何添加我的视图并将所有内容移回 20 像素?

假设我不必删除状态栏,而是可以用我的视图覆盖它,那么我就会遇到背景颜色的问题。这会在视图之间发生变化,因此我需要屏蔽现有的状态栏文本 - 我该怎么做?

感谢您的帮助。

【问题讨论】:

关注此link 。希望这会有所帮助 【参考方案1】:

您的方法是正确的,只是对 self.view 的框架进行了一些调整。

将以下方法添加到您的 viewController,

-(void)viewWillLayoutSubviews
    [super viewWillLayoutSubviews];
    self.view.frame =CGRectMake(0, 20, 320, [UIScreen mainScreen].bounds.size.height);

上述方法将您的视图向下移动 20 像素。

【讨论】:

我不想向下移动整个屏幕 - 只是导航栏。我可以通过使用 self.navigationController.navigationBar 而不是 self.view 来做到这一点。谢谢!【参考方案2】:

第一步是隐藏状态栏。在 ios 7 中,您可以通过添加 prefersStatusBarHidden function 来做到这一点,如下所示:

- (BOOL)prefersStatusBarHidden 
    return YES;

这将隐藏状态栏。

要解决您提到的移动问题,您需要将viewController的状态栏样式设置为none(在界面编辑器中)。

首先选择左侧面板中的View Controller

前往 Xcode 右侧的 Attributes Inspector,将 Status Bar 设置为 none

就是这样,现在你可以在屏幕顶部添加你自己的视图和你自己的内容:)

【讨论】:

附注:如果您以编程方式编写了 UI 对象,您也可以通过编程方式将 Status Bar 样式设置为 none UINavigationBar 仍然从 y=0 开始。如何将其移至 y=20 以便我可以在导航栏上方插入视图? 您可以禁用自动布局并将导航栏的y 设置为20,如下所示:[navBar setFrame:CGRectMake(navBar.frame.x, 20, navBar.frame.width, navBar.frame.height)];【参考方案3】:

要在iOS7中完全隐藏状态栏,在Info.plist中将“View controller-based status bar appearance”设置为NO,在application:didFinishLaunchingWithOptions中设置[[UIApplication sharedApplication] setStatusBarHidden:YES];

【讨论】:

【参考方案4】:

我认为您正在使用自动布局。因此,为了做到这一点,只需将所有视图放在另一个视图中,并在 delta y 中为 ios6/7 放置 20px。不要忘记跟随 Audun Kjelstrup 的脚步。希望它能解决你的问题。

【讨论】:

以上是关于用自己的视图替换状态栏的主要内容,如果未能解决你的问题,请参考以下文章

iOS9用自定义uiwindow覆盖状态栏 - 位置错误

带有动作的UITabBarButton

MFC技巧一:单文档中将系统菜单栏替换为自己建立的菜单栏(转)

轻松实现状态栏颜色变化

iOS TableViewController 滚动离开状态栏下的内容和导航栏

状态栏电量百分比的字体怎么修改