繁体   English   中英

iOS-通过在左侧边缘平移弹出视图控制器,导航栏消失

[英]iOS - pop a view controller by panning on the left edge, navigation bar disappears

因此,iOS 7引入了此新功能,您可以通过在左侧边缘平移来弹出视图控制器。 这是我的问题:我有两个视图控制器A和B,它们通过推式按钮连接。 两个控制器都有导航栏(通过将A嵌入导航控制器中)。 一旦用户进入B的场景,B中的导航栏将被隐藏,如果用户点击该场景,则可以显示。 如果在隐藏导航栏的同时用户在B的左边缘平移,则A中的导航栏也将被隐藏,这意味着用户无法从A进一步返回。强制A始终显示导航栏,而不管B是否隐藏了导航栏? 还是有一种简单的方法可以防止平移手势生效? 我阅读了这篇文章该文章提出了一种防止平移的方法,但我无法在情节提要中找到该属性。

编辑:所以我禁用了交互式弹出手势识别器,但只能解决一半的问题。 另一半是,如果在导航栏消失时单击子视图控制器导航栏上的后退按钮,那么我将导航回到没有导航栏的父视图控制器。 我尝试在viewWillAppear调用[self.navigationController setNavigationBarHidden:NO] ,然后调用viewDidLoad但是它不起作用。 是SDK中的某种错误,还是我缺少某些东西?

这是在子视图控制器中隐藏导航栏的代码

- (void)hideNavigationBar
{
    if (self.navigationBarHidden == NO)
    {
        [UIView animateWithDuration:UINavigationControllerHideShowBarDuration animations:^{
            self.navigationController.navigationBar.alpha = 0.0;
            self.previewCollectionView.alpha = 0.0;
        } completion:^(BOOL finished) {
            self.navigationBarHidden = YES;
        }];
    }
}

是的,您可以在A viewController的-viewWillAppear方法中强制导航栏的外观。

另外,由于在情节提要中找不到interactivePopGestureRecognizer属性,因此可以在viewController的-viewDidLoad方法中使用以下行:

self.navigationController.interactivePopGestureRecognizer.enabled = NO;

编辑:

viewWillAppear method ,您将必须调用:

[self.navigationController setNavigationBarHidden:NO];
self.navigationController.navigationBar.alpha = 1.0;

我发现您的情况有几个问题:

  1. 您禁用了交互式弹出手势,并从视图控制器B隐藏了导航栏。用户应该如何直观地返回?

  2. 将导航栏隐藏在B中的动画可能是造成此问题的原因。 如果时间长于一瞬间,则该动画可能无法及时完成,请您按下“后退”按钮,并且-viewWillAppear会在A上触发。

  3. 您在B中的代码隐藏了导航控制器的导航栏。 拥有视图控制器A的导航控制器与拥有视图控制器B的实例相同。如果在加载B时隐藏了导航栏,那么您将返回到A(不确定在没有后退按钮或边缘的情况下该怎么做)平移手势),则仍应将其隐藏。

您可能不希望禁用该手势(以便用户可以直观地返回),并在视图控制器A的-viewWillAppear重新打开导航栏,以解决您在B中将其关闭的情况:

if (self.navigationBarHidden == NO)
{
    self.navigationController.navigationBar.alpha = 1.0;
    self.previewCollectionView.alpha = 1.0;
    self.navigationBarHidden = NO;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM