还想用滑动状态栏实现滑动侧菜单。在 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]
获得此功能(UIWindow
是 UIView
的子类)。这应该可以正确移动所有内容,您可能需要再做一个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
的不同值,看看哪个看起来最好。共有三个值:UIStatusBarAnimationNone
、UIStatusBarAnimationFade
和 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 滑动状态栏