首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >交互视图控制器解雇和更改statusBarStyle不兼容?

交互视图控制器解雇和更改statusBarStyle不兼容?
EN

Stack Overflow用户
提问于 2014-01-24 15:30:41
回答 2查看 2.1K关注 0票数 7

我提出了一个模式的UINavigationController与一个互动的解散过渡。父视图控制器具有暗状态栏,模态视图控制器具有轻型状态栏。我正在使用基于iOS 7视图控制器的状态栏外观配置。

只要我非交互地呈现和解散视图控制器,所有的工作都会很好.然而,当我开始一个交互式的解散转换并取消它时,状态栏的颜色仍然是黑色的。

我创建了一个sample project。点击“菜单”按钮,然后从右边的屏幕边缘平移开始交互转换。

我尝试过的事情:

  • 在转换被取消后,在涉及的任何导航和视图控制器上调用-setNeedsStatusBarAppearanceUpdate
  • 将navigationBar.barStyle更改为UIBarStyleDefault,并将其更改为UIBarStyleBlack

我还验证了我的模态导航控制器的statusBarStyle设置正确:

代码语言:javascript
运行
复制
(lldb) p (UIStatusBarStyle) [[[[[UIApplication sharedApplication] keyWindow] rootViewController] presentedViewController] preferredStatusBarStyle]
(UIStatusBarStyle) $8 = UIStatusBarStyleLightContent

不过,状态栏是黑色的。

还有什么我可以尝试的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-24 17:09:55

在我看来,这就像UINavigationController中的一个bug (UINavigationController)。在取消解雇后,UINavigationController不再再次查询其presentedViewController中的preferredStatusBarStyle,而是使用来自自身的preferredStatusBarStyle。我是通过覆盖-childViewControllerForStatusBarStyle来解决这个问题的

代码语言:javascript
运行
复制
- (UIViewController*)childViewControllerForStatusBarStyle {
    if (self.presentedViewController) {
        return self.presentedViewController.childViewControllerForStatusBarStyle;
    }

    return [super childViewControllerForStatusBarStyle];
}

然后,为了激活解雇期间(而不是之后)的更改,我还重写了-preferredStatusBarStyle

我把解决办法推到了sample project上。

票数 6
EN

Stack Overflow用户

发布于 2015-08-04 21:14:22

别忘了打电话

代码语言:javascript
运行
复制
[self.transitionContext cancelInteractiveTransition];

在您的UIPercentDrivenInteractiveTransition子类- (void)cancelInteractiveTransition实现中。作为启发,这是我的实现。

代码语言:javascript
运行
复制
- (void)cancelInteractiveTransition {

id<UIViewControllerContextTransitioning> transitionContext = self.transitionContext;
[transitionContext cancelInteractiveTransition];

UIView *fromView = [UIViewController fromViewForTransitioningContext:transitionContext];
UIView *toView = [UIViewController toViewForTransitioningContext:transitionContext];

if (self.presenting)
{
    CGRect endFrame = CGRectOffset([[transitionContext containerView] bounds], 0, CGRectGetHeight([[transitionContext containerView] bounds]));

    [UIView animateWithDuration:ANIMATION_DURATION_PAN animations:^{

        toView.frame = endFrame;

    } completion:^(BOOL finished) {

        [transitionContext completeTransition:NO];
    }];
}
else {

    CGRect endFrame = [[transitionContext containerView] bounds];

    [UIView animateWithDuration:ANIMATION_DURATION_PAN animations:^{
        fromView.frame = endFrame;
    } completion:^(BOOL finished) {
        [transitionContext completeTransition:NO];
    }];
}

}

编辑:这似乎对iOS 8.4有所帮助。在7.1上测试,但不可能。也许苹果公司最近修好了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21336410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档