0

我有一个基于导航栏的 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);

如果不是,那么实现我想要的正确方法是什么?

继承人和图像说明了问题所在:

例子

4

2 回答 2

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];
}
于 2013-01-10T18:03:55.430 回答
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];

现在它没有导航栏那么深,当然,它的可点击性

于 2013-01-11T08:22:02.380 回答