更改启用自动布局的控件的位置会还原更改吗?
Posted
技术标签:
【中文标题】更改启用自动布局的控件的位置会还原更改吗?【英文标题】:Changing the position of the autolayout enabled control revert the changes? 【发布时间】:2014-08-20 12:32:54 【问题描述】:我的应用程序的一部分在 UIcollectionView 中显示一个列表,如果用户向下滑动屏幕,我将在 viewController 顶部显示带有动画的 UISearchBar。 我在一个单独的 viewController 中完成了所有这些操作。
我使用自动布局来定位该 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
];
我有办法阻止它们移动到预先计算好的位置
【问题讨论】:
【参考方案1】:当你使用自动布局时,你不能设置框架。您必须更改约束并让它间接更改框架。
Apple 的 Auto Layout Guide 显示 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
属性。 (您的约束应该设置为移动一件事会导致另一件事自动调整。)
【讨论】:
以上是关于更改启用自动布局的控件的位置会还原更改吗?的主要内容,如果未能解决你的问题,请参考以下文章