用自己的视图替换状态栏
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 的脚步。希望它能解决你的问题。
【讨论】:
以上是关于用自己的视图替换状态栏的主要内容,如果未能解决你的问题,请参考以下文章
MFC技巧一:单文档中将系统菜单栏替换为自己建立的菜单栏(转)