在iOS 11上,SlideMenu未检测到关闭菜单的触摸。为什么?
我在我的一个个人项目中使用pod回购协议 如果我在iOS<11上运行我的项目,一切都会按预期运行:当侧菜单(蓝色视图控制器)触摸到外部时,即绿色部分。自动关闭它 但在iOS 11设备上运行时,点击外部时菜单不会关闭 另一个奇怪的情况是,这只发生在最近编译的版本(目前使用的是Xcode 9.0)上,在iOS11设备上运行App Store版本也能正常工作 所以我的问题是:在iOS 11上,SlideMenu未检测到关闭菜单的触摸。为什么?,ios,Ios,我在我的一个个人项目中使用pod回购协议 如果我在iOS
- 为什么会这样
- 在不替换整个库的情况下,如何避免这种情况发生
我在github中创建了一个复制问题的工具 Hello@Adrime我已经下载了您的代码并在Xcode 9.0中进行了测试 发现和你一样的问题。外面不是封闭的视野 在看过图书馆之后,我找到了一个解决方案 在SlideNavigationController.m文件中 已经创建了一个方法,它是
-(void)enableTapGestureToCloseMenu:(BOOL)enable
在该方法中,只需注释这一行[self.view removeGestureRecognizer:self.tap recognizer]代码>
你的问题解决了
这一行删除了在外部敲击的手势。更新:
我得到了您想要的,只需更改视图willlayoutsubviews
方法即可
- (void)viewWillLayoutSubviews
{
[super viewWillLayoutSubviews];
// Update shadow size of enabled
if (self.enableShadow)
self.view.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.view.bounds].CGPath;
// When menu open we disable user interaction
// When rotates we want to make sure that userInteraction is enabled again
//[self enableTapGestureToCloseMenu:NO];
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
self.interactivePopGestureRecognizer.enabled = YES;
self.topViewController.view.userInteractionEnabled = YES;
if (self.menuNeedsLayout)
{
[self updateMenuFrameAndTransformAccordingToOrientation];
// Handle different horizontal/vertical slideOffset during rotation
// On iOS below 8 we just close the menu, iOS8 handles rotation better so we support keepiong the menu open
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0") && [self isMenuOpen])
{
Menu menu = (self.horizontalLocation > 0) ? MenuLeft : MenuRight;
[self openMenu:menu withDuration:0 andCompletion:nil];
}
self.menuNeedsLayout = NO;
}
}
我所做的:做注释/[self-enableTapGestureToCloseMenu:NO]代码>代码并放在代码下面
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
self.interactivePopGestureRecognizer.enabled = YES;
self.topViewController.view.userInteractionEnabled = YES;
旧版:
这是因为在SlideNavigationController.m
文件中,您正在调用[self-enableTapgestToCloseMenu:NO]代码>
只需将其删除,或为所有iOS 11设置通过的条件YES
例如
if (IOS_VERSION == 11) {
[self enableTapGestureToCloseMenu:YES];
}
else {
[self enableTapGestureToCloseMenu:NO];
}
因为当你打开幻灯片菜单或点击绿色区域时,总是会呼叫
[self enableTapGestureToCloseMenu:NO];
因此,按照方法代码
- (void)enableTapGestureToCloseMenu:(BOOL)enable
{
if (enable)
{
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
self.interactivePopGestureRecognizer.enabled = NO;
self.topViewController.view.userInteractionEnabled = NO;
[self.view addGestureRecognizer:self.tapRecognizer];
}
else
{
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
self.interactivePopGestureRecognizer.enabled = YES;
self.topViewController.view.userInteractionEnabled = YES;
[self.view removeGestureRecognizer:self.tapRecognizer];
}
}
它是用于查看的RemoveTestureRecognitor
。在您的SlideNavigationController.m
文件中,转到viewWillLayoutSubviews
方法并删除或注释第行下方
[self enableTapGestureToCloseMenu:NO];
这是因为viewWillLayoutSubviews
方法最初在ios11
中被调用
因此,从视图willlayoutsubviews
,调用enableTapGestureToCloseMenu
,它将从右菜单中删除手势识别器 看看我更新的代码,它的工作原理和iOS 10一样