iOS - 导航栏内的动画不起作用

Posted

技术标签:

【中文标题】iOS - 导航栏内的动画不起作用【英文标题】:iOS - Animations inside Navigation Bar doesn't work 【发布时间】:2015-09-03 14:25:27 【问题描述】:

我有一个场景,我需要在导航栏中添加动画,但模拟器没有动画。我添加了一个 UIView,添加了一个标签/文本字段并为约束创建了出口,并使用“UIView animateWithDuration:”更新它们,相反,模拟器只是更新约束并相应地显示视图,但没有任何动画。我已经通过修改约束和框架(分别)进行了尝试。

[self.view layoutIfNeeded];
[UIView animateWithDuration: 3
                      delay: 0.0
                    options: UIViewAnimationOptionCurveEaseInOut
                 animations: ^
                     self.constraint.constant += 60;
                     NSLog(@"inside animation");
                     [self.view layoutIfNeeded];
                 
                 completion:nil];

当我在 viewDidLoad: 中将宽度约束增加“60”时显示。而且它是非动画的。

当我通过单击按钮配置约束(将宽度增加“60”)时,即使是静态更新也不会发生。

不过,相同的代码在 UIView 内的导航栏之外也能完美运行。

感谢任何帮助...

【问题讨论】:

你为什么不试试自定义导航栏? 您是否尝试过向导航栏添加 uiview 并在该视图中制作动画? @T_77 是的,我就是这么做的。对不起,我忘了提。我在导航栏中添加了一个 UIView 并在其顶部添加了标签。另外,这不是因为我的代码混乱。我用一个新项目试了一下,结果是一样的:( @manish_kumar 嗯.. 我会试试的。但是,您为什么认为自定义导航可以解决问题? 自定义导航栏是指UIView,它将用作导航栏。通过这种方式,您可以轻松地工作并添加您想要的任何功能。 【参考方案1】:

如果您的导航栏包含一些动画,那么您可以尝试绘制自定义导航栏。这是你必须做的:

    viewDidLoad() 方法中的视图控制器中添加以下代码

    self.navigationController.navigationBarHidden = YES;

    之后使用UIView 创建一个自定义导航栏,将框架调整为可见和顶部。

然后在视图上添加组件并开始使用动画。

【讨论】:

【参考方案2】:

您可以通过自定义 UIView 并为其创建宽度 NSLayoutConstraint 插座来实现这一点,在代码中您可以通过在调用动画代码之前调用 UpdateConstraintsIfNeeded 或 UpdateViewConstraints 方法来处理此变量的常量属性

【讨论】:

【参考方案3】:

好的,我终于解决了这个问题。呼……

我做的是……

    添加了一个视图来代替 barButtonItem(我们称其为“superView”)并在其上添加另一个视图(我们称其为“subView”),以便获得以下配置。

    在 subView 和它上面的对象之间设置了约束。现在,我为 superView 和 subView 创建了 outlet(superView 和 subView),使它们透明(当然是可选的)。

    有用的说明:将superView的宽度设置为默认的bar button item的宽度,将subView的宽度设置为屏幕宽度。在 superView 上禁用“剪辑子视图”,但在 subView 上启用。

    根据需要在我想要的地方添加了动画,但 layoutIfNeeded 在“superView”上,而不是在父视图上。

    [self.superView layoutIfNeeded];
    

祝你好运。

【讨论】:

以上是关于iOS - 导航栏内的动画不起作用的主要内容,如果未能解决你的问题,请参考以下文章

NSURLSession“完成处理程序”内的导航不起作用

Angular 6 路由器过渡动画不起作用(导航栏)

转到不在底部导航视图内的片段并返回后,底部导航视图不起作用

容器视图内的按钮不起作用

路由器导航幻灯片动画不起作用

自定义后退按钮图像在导航栏上不起作用