如何在 UINavigationBar 下方绘制主视图,以便当栏显示/隐藏时,视图不受影响?

Posted

技术标签:

【中文标题】如何在 UINavigationBar 下方绘制主视图,以便当栏显示/隐藏时,视图不受影响?【英文标题】:How do I draw main view underneath my UINavigationBar so when the bar shows/hides, the view is unaffected? 【发布时间】:2013-01-21 08:36:40 【问题描述】:

情况如下:

我正在使用 Autolayout 和 UINavigationController 为带有 ios 6 的 iPad 制作应用程序。我想做的是:

使用标准的 push segue 从一个视图控制器到下一个视图控制器。 当我到达新的视图控制器时,用动画隐藏导航栏。 当导航栏隐藏时,我希望我的视图根本不会改变。事实上,我希望我的视图从一开始就有效地绘制在导航栏下方,所以我没有移动或移动内容,也没有黑条。作为参考,当您阅读一本书时,Amazon Kindle 应用程序中会发生这种情况。

使用我当前的代码,我的视图内容向上移动以填充 UINavigationBar 留下的空白。

我尝试在我的 viewcontroller 的 viewWillAppear 方法中将 UIViewController 的视图和 UINavigationController 的视图的框架强制设置为整个 iPad 屏幕,但没有骰子。我已经在 Autolayout 中尝试了约束,但这也没有让我到达我想去的地方。

您能提供的任何帮助都会很棒!

【问题讨论】:

【参考方案1】:

在为导航栏设置动画之前尝试以下操作:

self.navigationController.navigationBar.alpha = 0.99f;

我没有尝试过,但这应该可以。

【讨论】:

抱歉,这不起作用。当导航栏隐藏时,底层视图仍然发生变化。 您在哪个函数中编写动画代码?你能分享一个做动画的代码sn-p吗? 在 viewDidAppear 下希望隐藏栏的控制器:[self.navigationController setNavigationBarHidden:YES animated:YES];【参考方案2】:

看起来您需要在新视图中添加自定义导航栏并使其消失。

我认为,在不移动视图的情况下隐藏导航控制器的原始导航栏是不可能的。

而是将 UINavigationBar 添加到 xib 文件,将其绑定到 IBOutlet uiNavigationBar 并尝试以下代码

-(void) viewWillAppear:(BOOL)animated 
    [super viewWillAppear:animated];
    [self.navigationController setNavigationBarHidden:YES animated:NO];


- (void) viewDidAppear:(BOOL)animated 
    [super viewDidAppear:animated];

    [UIView animateWithDuration:0.3f delay:0.0f options:UIViewAnimationOptionCurveEaseInOut animations:^
        CGRect f = self.uiNavigationBar.frame;
        f.origin = CGPointMake(f.origin.x, f.origin.y - 44);
        self.uiNavigationBar.frame = f;
     completion:^(BOOL finished) 
        NSLog(@"done");
    ];

【讨论】:

虽然我相信这可能会奏效,但我仍然很好奇是否有更优雅的解决方案通过自动布局而不涉及添加额外的 UINavigationBar。

以上是关于如何在 UINavigationBar 下方绘制主视图,以便当栏显示/隐藏时,视图不受影响?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 7 中 UINavigationbar 下方的 UISegmentedControl

iOS7如何绘制透明的UIToolbar或UINavigationBar

以编程方式在 UINavigationBar 下方的 UIToolbar 中添加 UISegmentedControl

IOS 去掉导航栏(UINavigationBar)下方的横线

Origin如何进行三维图绘制

如何将附加的阴影添加到 uinavigationbar 和 uitoolbar