【问题标题】:Pushing between 2 ViewControllers - NavigationBar在 2 个 ViewController 之间推送 - 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 你试过这个吗? . stackoverflow.com/a/1618557/294884
  • @JoeBlow 试过了,但你只是没有得到那种解决方案的“高级感觉”:/
  • @JoeBlow 我修好了:):) 看看我的回答

标签: ios objective-c uiview uinavigationcontroller uinavigationbar


【解决方案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 后面吗?
  • 恐怕我不会;我会问另一个问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-21
  • 2017-12-27
  • 2012-10-21
  • 1970-01-01
  • 2013-04-07
相关资源
最近更新 更多