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 - 导航栏内的动画不起作用的主要内容,如果未能解决你的问题,请参考以下文章