【问题标题】:Unable to hide status bar on iOS 6,7 when presenting viewcontroller呈现视图控制器时无法在 iOS 6,7 上隐藏状态栏
【发布时间】:2014-04-09 15:35:15
【问题描述】:

以下是我自定义的VC演示代码:

-(void)presentViewController:(UIViewController*)vc
{
    UIWindow *w = [[[UIApplication sharedApplication] delegate] window];
    UIViewController *parentController = (TabBarViewController *)[w rootViewController];

    [parentController addChildViewController:vc];
    if ([vc respondsToSelector:@selector(beginAppearanceTransition:animated:)]) // iOS 6
    {
        [vc beginAppearanceTransition:YES animated:YES];
    }
    UIView *toView = vc.view;
    [parentController.view addSubview:toView];
    toView.frame = parentController.view.bounds;

    CGAffineTransform tr = CGAffineTransformScale(self.view.transform, 1.0f, 1.0f);
    toView.transform = CGAffineTransformScale(self.view.transform, 0.01f, 0.01f);;
    CGPoint oldCenter = toView.center;

    toView.center = ((RootViewControllerEx*)vc).cellCenter;

    [UIView animateWithDuration:4.5 animations:^{
            toView.transform = tr;
            toView.center = oldCenter;
    } completion:^(BOOL finished) {

        [vc didMoveToParentViewController:parentController];
        if ([vc respondsToSelector:@selector(endAppearanceTransition)]) // iOS 6
        {
            [vc endAppearanceTransition];
        }

    }];
}

它工作正常,但是,在提供的 VC 中,我隐藏了状态栏:

- (BOOL)prefersStatusBarHidden {
    return YES;
}

当我使用内置的presentViewController:animated:completion: 展示我的 VC 时,展示的 VC 中的状态栏是隐藏的。但是我在 iOS 7 状态栏上的代码根本没有隐藏,在 iOS 6 上它更奇怪 - 状态栏是隐藏的,但我的视图大小比状态栏的大小从顶部变短。所以我可以在 iOS 6 上从顶部看到一个黑色间隙。使用自定义 VC 演示时,我应该如何正确隐藏状态栏?

【问题讨论】:

  • 更新了代码以解决边界问题。它解决了 iOS 6 上的问题,但仍然可以看到 iOS 7 状态栏。
  • 还尝试将modalPresentationStyle 设置为UIModalPresentationFullScreen。不好。

标签: ios uiview uiviewcontroller statusbar


【解决方案1】:

你应该在你的 viewDidLoad 中尝试这个来区分 IOS 6/7 状态栏问题

 if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)])
{
    //IOS 7 - Status Bar Hidden
    [self prefersStatusBarHidden];
    [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
    self.statusBarHidden = YES;
}
else
{
    // iOS 6 - Status Bar shown
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide];
    self.statusBarHidden = NO;
}

以及隐藏状态栏的方法

 - (BOOL)prefersStatusBarHidden{
return YES;}

并为状态栏添加一个属性

@property BOOL statusBarHidden;

然后确保您的视图限制在屏幕尺寸范围内并正确适配

我认为这解决了你的问题:)

【讨论】:

    【解决方案2】:

    试试这个

    在视图中确实加载了

       [UIApplication sharedApplication].statusBarHidden = YES;
    

    并在 plist 中设置值

    在项目摘要中设置此项

    这在你的界面构建器中

    【讨论】:

    • 这仅适用于 iOS6 并且仅隐藏状态栏。我的新视图控制器仍然显示空白代替状态栏。请仔细阅读我原来的问题。
    • 也检查这些属性
    • 再一次,当使用内置的presentViewController:animated:completion: 方法来显示它时,状态栏会正确隐藏。
    猜你喜欢
    • 2013-06-13
    • 1970-01-01
    • 2014-02-21
    • 2016-08-08
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 2014-02-07
    • 2017-06-23
    相关资源
    最近更新 更多