【发布时间】:2014-07-10 00:46:04
【问题描述】:
我正在开发一个 iOS 应用程序。根视图控制器包含一个 UINavigationController 包装应用程序的主要内容,以及一个 footerViewController(音频播放器),它将在动画进入视图时压缩主要内容。
我正在使用自动布局来显示和隐藏此页脚,如下所示:
_footerVisibleConstraints = [… @“V:|[navControllerView][footerView(==90)]|" …];
_footerHiddenConstraints = [… @“V:|[navControllerView][footerView(==0)]|" …];
通常这很好用。但我正在努力解决一个问题。我有一种情况,我需要在 UINavigationController 堆栈上推送一个新视图并同时为我的页脚设置动画:
[self.view layoutIfNeeded];
[UIView animateWithDuration:1.5f animations:^{
[[self view] removeConstraints:_footerHiddenConstraints];
[[self view] addConstraints:_footVisibleConstraints];
[[self view] layoutIfNeeded];
}];
[navigationController pushViewController:newViewController animated:YES];
在这种情况下的问题是 newViewController 动画是在捕捉到它的最终(压缩)状态,而不是从视图的完整起始高度开始。所以当页脚动画进入时,底部有一个间隙。
我已经放慢了动画的速度并发布了一个视频here 来演示我所描述的内容。
另外,请注意当我弹回根视图控制器时,UINavigationController 中的内容也没有被压缩。
那么,有人可以向我解释一下这里发生了什么吗?有没有办法完成我所追求的?
【问题讨论】:
标签: ios objective-c animation uinavigationcontroller autolayout