还想用滑动状态栏实现滑动侧菜单。在 iOS 中

Posted

技术标签:

【中文标题】还想用滑动状态栏实现滑动侧菜单。在 iOS 中【英文标题】:want to Implement Sliding side menu with sliding status bar also. in iOS 【发布时间】:2013-10-03 17:53:19 【问题描述】:

我有兴趣在我的应用程序中实现左侧菜单,为此我使用了 NVSlideMenuController。而且效果很好。

但我想修改它。我想用 contentViewController 滑动状态栏,不想在 MenuViewController 上显示状态栏。

目前如下图所示

我想和下图一样

提前致谢

【问题讨论】:

移动状态栏实际上可以“移动”,但只能通过一些操作。见this SO post Moving status bar in ios 7的可能重复 【参考方案1】:

您可以尝试在第二张图片上关闭 3G,您会发现状态栏没有更新。

这似乎是 iOS7

中的新 api
[[UIScreen mainScreen] snapshotViewAfterScreenUpdates:NO];

这可能是你问的同一个问题,并且有一个演示来展示你想要什么。

Moving status bar in iOS 7

【讨论】:

【参考方案2】:

您可以通过链接 keyWindow 的框架来做到这一点(您可以使用 [[UIApplication sharedApplication] keyWindow] 获得此功能(UIWindowUIView 的子类)。这应该可以正确移动所有内容,您可能需要再做一个UIWindow,从左边带上其他东西。

【讨论】:

【参考方案3】:

您将无法移动状态栏。你能做的最好的就是为那个视图控制器隐藏它:

- (void) viewWillAppear:(BOOL)animated

    [super viewWillAppear:animated];

    if (animated)
    
        [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
    
    else
    
        [[UIApplication sharedApplication] setStatusBarHidden:YES];
    


- (void) viewWillDisappear:(BOOL)animated

    [super viewWillDisappear:animated];

    if (animated)
    
        [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide];
    
    else
    
        [[UIApplication sharedApplication] setStatusBarHidden:NO];
    

尝试使用UIStatusBarAnimation 的不同值,看看哪个看起来最好。共有三个值:UIStatusBarAnimationNoneUIStatusBarAnimationFade 和 UIStatusBarAnimationSlide`。

【讨论】:

您是否看到邮箱应用程序在打开左侧菜单时状态栏在滑动。我想要同样的东西。 UIApplication 上有一个属性叫做 statusBarFrame ([[UIApplication sharedApplication].statusBarFrame)。您可以尝试将其渲染到 CG 图像上下文并使用该图像创建图像视图,然后隐藏状态栏并移动图像视图。这将“假装”状态栏移动,但不会显示动态内容。 或者你可以试试 hitTest:-ing 来尝试获取状态栏的视图。这可能是 Apple 不希望你做的事情,所以会很困难。 但主要问题是当我隐藏状态栏时,我的视图将在导航栏和视图内容之间获得 20px 的间隙。那么是否有任何默认控件或其他解决方案,请建议我。【参考方案4】:

这不是答案,而是对詹姆斯答案的回复,因为格式在评论中中断。

事实上,设置keyWindow的frame将无法移动状态栏。通过设置断点并打印出 keyWindow 递归描述,我们会注意到里面没有状态栏信息。

(lldb) po [[[UIApplication sharedApplication] keyWindow] recursiveDescription]
<UIWindow: 0x8c5bf80; frame = (0 0; 320 480); gestureRecognizers = <NSArray: 0x8c5c500>; layer = <UIWindowLayer: 0x8c5c0a0>>
   | <UIView: 0x8b49700; frame = (0 0; 320 480); autoresize = W+H; layer = <CALayer: 0x8b496b0>>
(lldb) 

按照Chris's 链接到Simon's 回答就可以了

【讨论】:

以上是关于还想用滑动状态栏实现滑动侧菜单。在 iOS 中的主要内容,如果未能解决你的问题,请参考以下文章

带有 SWRevealViewController 的 ios 滑动状态栏

在地图应用中通过滑动状态栏再现 Apple 效果

如何在导航栏上添加侧菜单关闭按钮

如何在向下滑动 UIWebView 以修复 iOS7 状态栏覆盖问题后更改 UIWebView 背景颜色?

侧菜单无法在 mapView 上快速正常工作

ios 7状态栏不继承导航栏颜色