【问题标题】:Adding a subview above the status bar iOS 7在 iOS 7 状态栏上方添加子视图
【发布时间】:2013-12-17 01:35:57
【问题描述】:

我有一个小的矩形视图,它从我的应用顶部向下动画。我需要它位于屏幕的最顶部并在状态栏上向下动画,但是动画视图出现在状态栏下方。有谁知道我如何通过状态栏获得它??

这是我目前正在做的事情

[self.navigationController.view addSubview:self.headerView];

它完美地工作并且处于正确的位置,除了它在状态栏下方的事实。有什么想法吗?

编辑:我知道这是可能的,因为 snapchat 做到了。

【问题讨论】:

  • 你不能在状态栏上放任何东西。您可以做的最好的事情是在视图显示在屏幕上时将其关闭,然后在您移除子视图时重新打开。
  • @nhgrif 如何动态关闭它然后再打开?我看过提到向 plist 文件添加内容的帖子,但我只需要在特定视图控制器上关闭 5 秒钟,而不是整个应用程序
  • 我相信plist 选项之一允许各个视图控制器自行关闭或打开它。

标签: ios view statusbar addsubview


【解决方案1】:

你可以做的一个选择是,当你为你的 headerView 设置动画时,

  1. 为状态栏拍摄快照
  2. 隐藏状态栏
  3. 在状态栏位置添加快照视图的子视图
  4. 在快照视图上制作标题视图动画
  5. 移除快照视图并再次显示状态栏。

这样你可以得到漂亮的动画,看起来像是在状态栏上做的。

编辑:我会尝试用伪代码解释

// 1. take snapshot of the status bar
UIView* snapshotView = [[UIScreen mainScreen] snapshotViewAfterScreenUpdates:NO];

// 2. hide statusbar
_statusBarHidden = YES;
[self setNeedsStatusBarAppearanceUpdate];

// you need to set "View controller-based status bar appearance" option to yes on plist
- (BOOL)prefersStatusBarHidden
{
    return _statusBarHidden;
}

// 3. add subview of snapshot view on the statusbar position
CGRect frame = self.view.frame;
frame.height = [[UIApplication sharedApplication] statusBarFrame].size.height;
[self.view addSubView:snapshotView];

// 4. do the header view animation over snapshot view
.. Just do the animation you already were doing

// 5. remove snapshot view and show statusbar again.
[snapshotView removeFromSuperview];

_statusBarHidden = NO;
[self setNeedsStatusBarAppearanceUpdate];

【讨论】:

  • 如何拍摄酒吧快照?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-03
相关资源
最近更新 更多