我的应用程序的一部分是在UIcollectionView中显示一个列表,如果用户向下滑动屏幕,我将在viewController的顶部显示带有动画的UISearchBar。 我在一个单独的viewController中完成了所有这些操作。
我使用autolayout来定位viewController中的控件。
我将搜索栏从y = -88移动到y = 0并向下移动collectionView以在用户向下滑动屏幕时为searchBar腾出空间,我的问题是如果我调用reloadData到collectionView,搜索栏和CollectionView都移动到之前的自动覆盖位置
我使用下面的动画来移动它们
[UIView animateWithDuration:0.4 animations:^(void){
fileSearchBar.frame=fileSearchBar.frame=CGRectOffset(fileSearchBar.frame, 0,88);
chartsCollectionView.frame=gridFrame;///gridFrame is calculated to move down
}];
我有办法阻止他们移动到预先计算的位置
答案 0 :(得分:0)
使用自动布局时,不得设置框架。您必须更改约束并让间接更改帧。
Apple的自动布局指南显示动画的an example:
[containerView layoutIfNeeded]; // Ensures that all pending layout operations have been completed
[UIView animateWithDuration:0.4 animations:^{
// Make all constraint changes here
[containerView layoutIfNeeded]; // Forces the layout of the subtree animation block and then captures all of the frame changes
}];
您没有显示如何设置约束,因此我无法向您展示如何修改它们以移动搜索栏和集合视图。理想情况下,您只需要设置其中一个约束的constant
属性。 (你的约束应该被设置,以便移动一个东西导致另一个自动调整自己。)