在iOS 7状态栏上方添加子视图

时间:2013-12-17 01:35:58

标签: ios view statusbar addsubview

我有一个小的矩形视图,从我的应用程序的顶部动画。我需要它在屏幕的最顶部并在状态栏上向下动画,但动画视图出现在状态栏下。任何人都知道如何通过状态栏获取它?

这是我目前正在做的事情

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

它完美地运行并且处于正确的位置除了状态栏下面的事实。有什么想法吗?

编辑:我知道这是可能的,因为Snapchat会这样做。

1 个答案:

答案 0 :(得分:1)

您可以做的一个选项是,当您为自己的headerView设置动画时,

  1. 拍摄状态栏的快照
  2. 隐藏状态栏
  3. 在状态栏位置添加快照视图的子视图
  4. 在快照视图上执行标题视图动画
  5. 删除快照视图并再次显示状态栏。
  6. 通过这种方式,您可以获得漂亮的动画,看起来就像在状态栏上做的那样。

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

    // 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];