【发布时间】:2014-06-30 04:56:48
【问题描述】:
我正在尝试隐藏我的一个视图控制器的状态栏(当模态显示时)。当我展示视图控制器时,状态栏将被隐藏,然后在关闭时返回。
我已将以下代码添加到呈现的视图控制器中
- (BOOL)prefersStatusBarHidden
{
return YES;
}
我还将 Info.plist 文件中的键设置为以下内容:
<key>UIViewControllerBasedStatusBarAppearance</key>
<true/>
据我了解,这应该是完成这项工作所需的全部内容。
我还使用自定义动画控制器来进行符合UIViewControllerAnimatedTransitioning 协议的演示。在animateTransition: 实现中,我尝试手动调用prefersStatusBarHidden,然后是setNeedsStatusBarAppearanceUpdate 以确保正在调用,但状态栏仍然存在。
任何想法为什么会发生这种情况将不胜感激。我已经搜索过 StackOverflow,但似乎没有人遇到过这个问题,所有接受的答案都是指调用 setNeedsStatusBarAppearanceUpdate,我已经在这样做了。
EDIT - 下面的代码现在似乎 WORK 符合需要
- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext
{
if (self.isPresenting) {
UIView *containerView = [transitionContext containerView];
UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
toViewController.view.frame = containerView.frame;
[containerView addSubview:toViewController.view];
// Ask the presented controller whether to display the status bar
[toViewController setNeedsStatusBarAppearanceUpdate];
[UIView animateWithDuration:1.0f delay:0.0f options:UIViewAnimationOptionCurveEaseIn animations:^{
toViewController.view.alpha = 1.0f;
fromViewController.view.alpha = 0.0f;
} completion:^(BOOL finished) {
[transitionContext completeTransition:YES];
}];
}
else {
// do the reverse
UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
[UIView animateWithDuration:1.0f delay:0.0f options:UIViewAnimationOptionCurveEaseIn animations:^{
toViewController.view.alpha = 1.0f;
fromViewController.view.alpha = 0.0f;
} completion:^(BOOL finished) {
[transitionContext completeTransition:YES];
// Once dismissed - ask the presenting controller if the status bar should be presented
[toViewController setNeedsStatusBarAppearanceUpdate];
}];
}
}
....
// PresentingController.m
- (BOOL)prefersStatusBarHidden
{
if (self.presentedViewController) {
return YES;
}
return NO;
}
// PresentedController.m
- (BOOL)prefersStatusBarHidden
{
return YES;
}
【问题讨论】:
-
在 prefersStatusBarHidden 中添加一个断点来检查它是否被调用。
-
肯定是被调用了,断点被命中了。
-
您是否尝试删除密钥?因为他们不应该被需要。
-
是的,我试过了。有趣的是,我刚刚尝试展示没有自定义转换控制器(iOS 原生模式)的控制器,它似乎删除了状态栏。但我需要让它与这个自定义动画控制器一起工作。
-
嗯,也许可以贴一些代码自定义动画是如何工作的?
标签: ios objective-c ios7 uiviewcontroller ios7-statusbar