[英]iOS status bar - View Controller to Navigation Controller
[英]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;
我发现您的情况有几个问题:
您禁用了交互式弹出手势,并从视图控制器B隐藏了导航栏。用户应该如何直观地返回?
将导航栏隐藏在B中的动画可能是造成此问题的原因。 如果时间长于一瞬间,则该动画可能无法及时完成,请您按下“后退”按钮,并且-viewWillAppear
会在A上触发。
您在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.