Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在iOS 11上,SlideMenu未检测到关闭菜单的触摸。为什么?_Ios - Fatal编程技术网

在iOS 11上,SlideMenu未检测到关闭菜单的触摸。为什么?

在iOS 11上,SlideMenu未检测到关闭菜单的触摸。为什么?,ios,Ios,我在我的一个个人项目中使用pod回购协议 如果我在iOS

我在我的一个个人项目中使用pod回购协议

如果我在iOS<11上运行我的项目,一切都会按预期运行:当侧菜单(蓝色视图控制器)触摸到外部时,即绿色部分。自动关闭它

但在iOS 11设备上运行时,点击外部时菜单不会关闭

另一个奇怪的情况是,这只发生在最近编译的版本(目前使用的是Xcode 9.0)上,在iOS11设备上运行App Store版本也能正常工作

所以我的问题是:

  • 为什么会这样
  • 在不替换整个库的情况下,如何避免这种情况发生

我在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一样