我有一个基于ipad应用程序的导航栏。
在某些时候,我想将另一个视图控制器推入视图控制器层次结构中。然后,当用户选中某个按钮时,我想显示一个leftMenu控制器。为此,我有两种观点:
包含所有内容的内容视图
一个不可见的视图是leftMenu。这个是在内容视图下。
因此,当用户按下按钮时,我现在正在做的是将内容视图和导航栏移到右侧以使leftMenu可见:
self.navigationController.navigationBar.frame = CGRectMake(271.0, self.navigationController.navigationBar.frame.origin.y, self.navigationController.navigationBar.frame.size.width, self.self.navigationController.navigationBar.frame.size.height);
self.contentView.frame = CGRectMake(271.0, self.contentView.frame.origin.y, self.contentView.frame.size.width, self.contentView.frame.size.height);
这是有效的,但左侧菜单中的第一行不是“可点击的”导航条所在的位置。就像导航栏仍然在那里捕捉标签事件。
这样做是对的吗?:
self.navigationController.navigationBar.frame = CGRectMake(271.0, self.navigationController.navigationBar.frame.origin.y, self.navigationController.navigationBar.frame.size.width, self.self.navigationController.navigationBar.frame.size.height);
如果没有,是什么方式实现我想要的?
下图和图像说明了问题所在:
答案 0 :(得分:1)
我认为最好使用自定义容器控制器来执行此类操作,而不是移动导航栏。在IB中,这可以很容易地设置。从UIViewController开始,向其添加容器视图,并根据需要调整大小。然后在检查器中,将其x值设置为减去其宽度,这将使其偏离屏幕左侧。然后添加另一个容器视图并将其调整为全屏。然后,您可以删除使用该容器视图获得的视图控制器,并右键从容器视图拖动到初始导航控制器(已设置的UI)以将其与嵌入segue连接。您开始使用的UIViewController应该成为故事板的初始视图控制器。要在侧视图中移动,我在该自定义容器控制器中使用此代码:
-(void)slideInLeft {
if (isRevealed == NO) {
[UIView animateWithDuration:.6 animations:^{
leftView.center = CGPointMake(leftView.center.x + 100, leftView.center.y);
mainView.center = CGPointMake(mainView.center.x + 100, mainView.center.y);
} completion:^(BOOL finished) {
isRevealed = YES; ;
}];
}else{
[UIView animateWithDuration:.6 animations:^{
leftView.center = CGPointMake(leftView.center.x - 100, leftView.center.y);
mainView.center = CGPointMake(mainView.center.x - 100, mainView.center.y);
} completion:^(BOOL finished) {
isRevealed = NO;
}];
}
}
leftView和mainView是2个容器视图的IBOutlets。我从主视图控制器中的一个按钮(嵌入在大容器视图中的导航控制器的根视图控制器)中调用此方法:
-(IBAction)callSlideIn:(id)sender {
[(ViewController *)self.navigationController.parentViewController slideInLeft];
}
答案 1 :(得分:0)
我找到了一种“快速”的方法来实现这一点(并且有点hacky imo)
我将leftMenu视图添加到视图层次结构中的顶视图:
UIWindow* window = [UIApplication sharedApplication].keyWindow;
if (!window)
window = [[UIApplication sharedApplication].windows objectAtIndex:0];
[[[window subviews] objectAtIndex:0] addSubview:self.leftMenu.view];
现在它比导航栏深,当然还有可点击的