在 2 个 ViewController 之间推送 - NavigationBar

Posted

技术标签:

【中文标题】在 2 个 ViewController 之间推送 - NavigationBar【英文标题】:Pushing between 2 ViewControllers - NavigationBar 【发布时间】:2014-10-21 12:12:34 【问题描述】:

我正在尝试从一个 VC 推送到另一个 - 这是 0 问题,但是 VC1 有一个橙色的 NavigationBar,而 VC2 有一个完全透明的 NavigationBar。我想在 push segue 期间在 2 个不同的 NavigationBars 之间平滑过渡。然而,目前 - 它出现了这个黑色的滑动条,颜色并没有很好地过渡。这是我的代码:

VC1 viewWillAppear:

    // Set the BarTintColor to translucent and text colors to white
[UIView animateWithDuration:0.5 animations:^
    self.navigationController.navigationBar.barTintColor = [UIColor orangeColor];
    self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
    self.navigationController.navigationBar.titleTextAttributes = [NSDictionary dictionaryWithObject:[UIColor whiteColor] forKey:UITextAttributeTextColor];
];

VC 2 viewWillAppear:

    // Make the NavigationBar transparent
[UIView animateWithDuration:0.5 animations:^
    self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];
    [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
    self.navigationController.navigationBar.shadowImage = [UIImage new];
    self.navigationController.navigationBar.translucent = YES;
];

我怎样才能以更有效和更好的方式解决这个问题?

谢谢! 埃里克

【问题讨论】:

这个问题让人头疼。真的,我认为最好的解决方案就是滑入新的(“超过”旧的) @JoeBlow 一个解决方案是切换到模态呈现它而不是推送它。您认为最好的解决方案是什么? FTR 你试过这个吗? . ***.com/a/1618557/294884 @JoeBlow 试过了,但你只是没有得到那种解决方案的“高级感觉”:/ @JoeBlow 我修好了:):) 看看我的回答 【参考方案1】:

这样解决了:

    // Make the NavigationBar transparent
self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];
[UIView animateWithDuration:0.4 delay:0 usingSpringWithDamping:.8 initialSpringVelocity:1.5 options:UIViewAnimationOptionTransitionNone animations:^
    [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
    self.navigationController.navigationBar.shadowImage = [UIImage new];
    self.navigationController.navigationBar.translucent = YES;
completion:^(BOOL finished) 
];

在 animateWithDuration 块之外设置 clearColor 可使动画平滑十亿倍。现在它的动画效果很好

【讨论】:

@JoeBlow 难道不是另一种解决方案是让 NavigationBar 始终透明,并使用背景 ImageView 而不是 tint 属性设置 NavigationBar 的色调?也许这样可以实现更流畅的动画?我明天会尝试实现它 嗨,Erik - 是的,这似乎是个好主意。在这方面,我们真的有点“与苹果作斗争”:在每次新的 ios 更新时,他们将/正在对“这些条的工作方式”进行微小的改变后做出微小的改变;真正保持它的工作会很棘手! :O 但是是的,这似乎是个好主意...... 如果你做了一个橙色的图像,根据NavigationBar的大小设置它的高度,并在顶部SuperView设置一个0空间的Constraint?还有一个按比例填充的模式,这行得通吗? @JoeBlow @JoeBlow 你知道如何将 UIImageView 放在 NavigationBar 后面吗? 恐怕我不会;我会问另一个问题

以上是关于在 2 个 ViewController 之间推送 - NavigationBar的主要内容,如果未能解决你的问题,请参考以下文章

推送特定的 viewController

从 AppDelegate 应用崩溃时,在 NavigationController 中推送超过 3 个 ViewController

推送 ViewController 后的触摸事件问题

无法推送 viewController,因为 navigationController 为 nil

iOS:通过委托方法从推送的 ViewController 返回?

swift - 通过 prepareforsegue 在 2 个视图控制器之间添加值