某些按钮被隐藏时,Swift自动布局会更改按钮位置

时间:2018-09-25 09:39:09

标签: ios iphone swift ios-autolayout

我将自定义UICollectionViewCell设置为TaskCell,在其中添加了4个按钮。 所有按钮均使用自动布局以编程方式添加。

现在,当我隐藏一些按钮时,我希望其余的按钮代替隐藏的按钮。检查以下图像。

enter image description here

在这里您可以看到4个按钮通过使用TrailingAnchors对齐到右侧。 现在,如果我隐藏了最后两个按钮,即“评级”和“删除”,那么我希望其余两个按钮向右移动并代替评级和“删除”按钮。

下图显示当我隐藏评分和删除按钮时其他按钮仍保留在同一位置。

什么是最好的方法?

我知道一种方法,我们必须存储TrailingAnchors并根据我们的条件设置其active属性。

喜欢关注

enter image description here

var deleteTrailingAnchor: NSLayoutConstraint?

deleteTrailingAnchor = deleteButton.trailingAnchor.constraint(equalTo: buttonContainer.trailingAnchor, constant: -8)

 deleteTrailingAnchor?.isActive = true

现在我们必须根据需要管理deleteTrailingAnchor

是否有使用AutoLayouts解决此问题的更好方法。

谢谢您的帮助。

2 个答案:

答案 0 :(得分:2)

UIStackView将做您想要的事情。

给出顶部,底部和尾部约束,但 给出宽度约束。

添加/删除排列的子视图时,它将在单元格中保持“右对齐”。

在这里,我有4个UIImageViews“ a”,“ b”,“ c”和“ d”。图像视图的宽度限制为30,宽高比限制为1:1。

首先,所有4个图像视图都在堆栈视图中:

enter image description here

接下来,我删除了“ c”:

enter image description here

现在,我删除了“ a”和“ c”:

enter image description here

如您所见,堆栈视图为您处理图像视图的放置。

答案 1 :(得分:0)

最简单的方法是向所有按钮添加宽度限制(还将按钮之间的间隔设置为0,并使它们彼此对齐)。然后,当您需要隐藏一个(或几个)时,只需将isHidden设置为true并将一个(或几个按钮)的宽度限制值设置为0。它们将隐藏,所有其他按钮将布局为新位置。如果您用UIView.animate(withDuration:, animations:)

对其进行动画处理会更好。