我在我的一个个人项目中使用了pod iOS-Slide-Menu repo。
如果我在iOS上运行我的项目< 11一切都按预期工作:当侧面菜单(蓝色视图控制器),触摸它外面,即绿色部分。自动关闭它
但是在使用iOS 11的设备上运行时,在外面点击时菜单不会关闭。
另一个奇怪的情况是,这只发生在最近编译的版本(目前使用Xcode 9.0),在iOS11设备上运行App Store版本也能正常工作。
所以我的问题是:
我在github中创建了一个SAMPLE PROJECT来重现问题。
答案 0 :(得分:1)
Hello @Adrime我已下载您的代码并在Xcode 9.0中测试过 发现像你一样的问题。外面没有关闭视图。
看到库后,我找到了一个解决方案。在SlideNavigationController.m文件中,
已经创建了一个- (void)enableTapGestureToCloseMenu:(BOOL)enable
在该方法中,只需注释这一行[self.view removeGestureRecognizer:self.tapRecognizer];
,你的问题就解决了。
这条线移除了外面的攻击。</ p>
答案 1 :(得分:1)
<强>更新强>
我得到了你想要的东西,只需改变你的viewWillLayoutSubviews
方法
- (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;
<强> OLD:强>
这是因为在SlideNavigationController.m
文件中您正在调用[self enableTapGestureToCloseMenu:NO];
只需删除它或让iOS 11为所有
传递 YES对于EX。
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];
}
}
视图为removeGestureRecognizer
。
答案 2 :(得分:1)
在您的SlideNavigationController.m
文件中,转到viewWillLayoutSubviews
方法并删除或评论下面的行
[self enableTapGestureToCloseMenu:NO];
这是因为viewWillLayoutSubviews
方法最初在ios 11
中被调用了!
所以,从viewWillLayoutSubviews
开始,enableTapGestureToCloseMenu
会被调用,它会从右侧菜单中删除手势识别器!