【问题标题】:Is it correct to move the navigation bar frame?移动导航栏框架是否正确?
【发布时间】:2012-12-24 13:35:56
【问题描述】:

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

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

这里和图片说明了问题所在:

【问题讨论】:

  • 我建议你使用 DDMenuController.. 如果你想显示和隐藏 leftMenu(就像在 Facebook 移动应用程序中一样).. 甚至是路径应用程序..
  • 我喜欢自己做,不会那么难。 (坚果要检查源代码)

标签: ios ipad cocoa-touch uinavigationcontroller navigationbar


【解决方案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];
}

【讨论】:

    【解决方案2】:

    我找到了一种“快速”的方法来实现这一点(而且有点 hacky imo)

    我将 leftMenu 视图添加到视图层次结构的顶部视图中:

    UIWindow* window = [UIApplication sharedApplication].keyWindow;
    if (!window)
        window = [[UIApplication sharedApplication].windows objectAtIndex:0];
    
    [[[window subviews] objectAtIndex:0] addSubview:self.leftMenu.view];
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-25
      相关资源
      最近更新 更多