在具有自动布局的UIView之间切换

时间:2014-12-10 10:46:24

标签: ios uiview uicollectionview autolayout

我有一个带有2组按钮的屏幕(两个设置都位于UIView内),只需要显示一个按钮,并且在它们下方UICollectionView(并且与其中一个相关联)自动布局)

为了“显示”我正在使用的正确视图 [self.view bringSubviewToFront:<relevant view>];

一切正常,直到我前往另一个屏幕然后按回来。 我在按钮视图和UICollectionView

之间得到一个奇怪的空白

这肯定只发生在“2次替换”(2次调用bringSubviewToFront

之后

所以我的问题是 - 在使用autolayout时将2个视图放在同一个地方并选择正确的视图的正确方法是什么

1 个答案:

答案 0 :(得分:0)

创建容器UIView,将其约束到UICollectionView,并将相关按钮视图添加为容器视图的子视图。这样,您需要管理的唯一约束是切换时容器与其子视图之间的约束。集合视图和容器视图始终存在,因此只需要设置一次。

当您在容器中切换视图时,您需要在代码中添加约束,如下所示

// Remove the view that is no longer relevant, this will remove associated constraints 
[viewToRemove removeFromSuperview]; 

// Add the relevant view to the container
[containerView addSubview:viewToAdd];

// This constrains the view to all edges of the container
[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[viewToAdd]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(viewToAdd)];
[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[viewToAdd]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(viewToAdd)];

确保对两个视图保持强引用,这样就不会从视图堆栈中删除它们。

如果您想要更快捷的方式,我只需设置相关的视图hidden属性,而不是更改子视图堆栈的顺序。我建议采用第一种方式,因此您可以确保用户无法点按不应向其显示的按钮