我有一个带有2组按钮的屏幕(两个设置都位于UIView
内),只需要显示一个按钮,并且在它们下方UICollectionView
(并且与其中一个相关联)自动布局)
为了“显示”我正在使用的正确视图
[self.view bringSubviewToFront:<relevant view>];
一切正常,直到我前往另一个屏幕然后按回来。
我在按钮视图和UICollectionView
这肯定只发生在“2次替换”(2次调用bringSubviewToFront
)
所以我的问题是 - 在使用autolayout时将2个视图放在同一个地方并选择正确的视图的正确方法是什么
答案 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
属性,而不是更改子视图堆栈的顺序。我建议采用第一种方式,因此您可以确保用户无法点按不应向其显示的按钮