我已经隐藏了导航栏和状态栏,现在屏幕边缘平移手势返回不起作用,这是典型的吗?

Posted

技术标签:

【中文标题】我已经隐藏了导航栏和状态栏,现在屏幕边缘平移手势返回不起作用,这是典型的吗?【英文标题】:I've hidden the navigation bar and the status bar, now the screen edge pan gesture to go back won't work, is this typical? 【发布时间】:2014-12-05 07:03:18 【问题描述】:

我很好奇,如果我将navigationBar 设置为hidden,同时隐藏状态栏,我的视图控制器将不再响应屏幕边缘手势来弹出视图控制器。

这是预期的行为吗?隐藏导航栏后,我尝试在viewDidLoad 中将interactivePopGestureRecognizer 设置为启用,但它仍然不起作用。

【问题讨论】:

是的,这是完全正常的行为。 @soulshined 那么我该如何应对呢? 查看我的答案以供审核。只需将手势添加到您的 viewDidLoad 即可!快乐编码 我的回答回答了你的问题吗 【参考方案1】:
[self.navigationController.navigationBar setHidden:YES];<--doesn't remove pop gesture

[self.navigationController setNavigationBarHidden:YES];<-- disables pop gesture

只需使用第一个选项,然后在根控制器的 viewDidAppear 方法中使用:

[self.navigationController.navigationBar setHidden:NO];

【讨论】:

【参考方案2】:

你确定你做对了吗?我整理了一个似乎对我有用的例子。我所做的只是制作navigationController.navigationBar.hidden = YES[[UIApplication sharedApplication] setStatusBarHidden:YES]

-编辑-

经过仔细检查,UINavigationController 上似乎有两个不同的属性。 navigationBar 是 UINavigationBar 视图,navigationBarHidden 是布尔值。当您将 navigationBarHidden 设置为 true 时,滑动手势将停止工作。但是,如果您使用navigationBar.hidden 将实际视图设置为隐藏,则该手势仍然有效。查看 Git 存储库以获取示例。

【讨论】:

我在UIViewController 上使用preferStatusBarHidden 方法隐藏状态栏。【参考方案3】:

一个非常简单的解决方法:

将滑动手势方法链接到导航返回按钮。使用选择器 popThisViewController 使当前视图控制器成为手势识别器(自身)的目标。然后将手势识别器安装到用户将滑动的视图中。不要忘记添加您的返回操作

编辑添加了滑动手势以供其他不知道的编码人员参考

更简洁的代码如下所示:

    UISwipeGestureRecognizer *gesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(goBack:)];
    gesture.numberOfTouchesRequired = 1;
    gesture.direction = UISwipeGestureRecognizerDirectionRight;
    [self.view addGestureRecognizer:swipeRight];


-(IBAction)goBack:(id)sender 
    [self.navigationController popViewControllerAnimated:YES];

【讨论】:

这与ios 7的pop手势有很大不同。一方面,它只从屏幕的边缘开始,另一方面,它是交互式的。 这与 iOS 7 的弹出手势有很大不同,可以通过其他方式隐藏导航栏轻松解决

以上是关于我已经隐藏了导航栏和状态栏,现在屏幕边缘平移手势返回不起作用,这是典型的吗?的主要内容,如果未能解决你的问题,请参考以下文章

极简操作无需root隐藏S8导航栏和状态栏

系统覆盖不覆盖状态栏和导航栏 Android

如何在主屏幕和子屏幕中显示状态栏和隐藏状态栏

在 iPhone X 上,分别控制显示/隐藏导航栏和状态栏

iOS:状态栏和导航栏:空格或底层

状态栏、导航栏、PopupWindow的使用