iOS 7滑出抽屉可拖动的bug

时间:2014-12-30 22:26:23

标签: ios objective-c uiview autolayout

我正在尝试实施类似于本指南中的滑动抽屉:http://www.raywenderlich.com/32054/how-to-create-a-slide-out-navigation-like-facebook-and-path

我有两个子视图添加到导航控制器中,抽屉在viewDidLoad中初始化如下:

self.drawerViewController = [[DrawerViewController alloc] initWithNibName:@"drawer" bundle:nil];
self.drawerViewController.view.autoresizingMask = UIViewAutoresizingFlexibleHeight;
[self.view addSubview:self.drawerViewController.view];
[self addChildViewController: self.drawerViewController];
[self.drawerViewController didMoveToParentViewController:self];
self.drawerViewController.view.frame = CGRectMake(0, 0, 150, self.view.frame.size.height);

然后使用我的故事板中的viewcontroller初始化contentview(我调用send subviewtoback来移动它后面的抽屉):

UIStoryboard* sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
self.contentViewController = [sb instantiateViewControllerWithIdentifier:@"HomeViewController"];
[self.view sendSubviewToBack:self.drawerViewController.view];
[self pushViewController:self.contentViewController animated:YES];

我通过动画内容视图的框架来移动主内容视图,该视图揭示了下面的抽屉:

    [UIView animateWithDuration:SLIDE_TIME delay:0 options:UIViewAnimationOptionBeginFromCurrentState
                 animations:^{self.contentViewController.view.frame = CGRectMake(150, 0, self.view.frame.size.width, self.view.frame.size.height);
                 }completion:nil];

哪个有效,但如果我点击抽屉的边缘并拖动,抽屉可以最终覆盖iphone模拟器中的整个屏幕或消失显示黑色背景(在旋转设备时更容易再现)显示抽屉)。我的问题是为什么抽屉视图可以拖动,你如何防止这种情况?

编辑: 我发现拖动的来源是来自这个addChildViewController行:

[self addChildViewController: self.drawerViewController];

但是,删除此功能不允许用户再次单击表格单元格。

1 个答案:

答案 0 :(得分:0)

问题是使用导航控制器作为子视图的容器。我不认为这意味着以这种方式使用,所以我最终废弃了这个并用uiviewcontroller容器重写它。