我将自定义UICollectionViewCell
设置为TaskCell
,在其中添加了4个按钮。
所有按钮均使用自动布局以编程方式添加。
现在,当我隐藏一些按钮时,我希望其余的按钮代替隐藏的按钮。检查以下图像。
在这里您可以看到4个按钮通过使用TrailingAnchors对齐到右侧。 现在,如果我隐藏了最后两个按钮,即“评级”和“删除”,那么我希望其余两个按钮向右移动并代替评级和“删除”按钮。
下图显示当我隐藏评分和删除按钮时其他按钮仍保留在同一位置。
什么是最好的方法?
我知道一种方法,我们必须存储TrailingAnchors并根据我们的条件设置其active属性。
喜欢关注
var deleteTrailingAnchor: NSLayoutConstraint?
deleteTrailingAnchor = deleteButton.trailingAnchor.constraint(equalTo: buttonContainer.trailingAnchor, constant: -8)
deleteTrailingAnchor?.isActive = true
现在我们必须根据需要管理deleteTrailingAnchor
。
是否有使用AutoLayouts
解决此问题的更好方法。
谢谢您的帮助。
答案 0 :(得分:2)
UIStackView
将做您想要的事情。
给出顶部,底部和尾部约束,但 不 给出宽度约束。
添加/删除排列的子视图时,它将在单元格中保持“右对齐”。
在这里,我有4个UIImageViews“ a”,“ b”,“ c”和“ d”。图像视图的宽度限制为30,宽高比限制为1:1。
首先,所有4个图像视图都在堆栈视图中:
接下来,我删除了“ c”:
现在,我删除了“ a”和“ c”:
如您所见,堆栈视图为您处理图像视图的放置。
答案 1 :(得分:0)
最简单的方法是向所有按钮添加宽度限制(还将按钮之间的间隔设置为0,并使它们彼此对齐)。然后,当您需要隐藏一个(或几个)时,只需将isHidden
设置为true
并将一个(或几个按钮)的宽度限制值设置为0。它们将隐藏,所有其他按钮将布局为新位置。如果您用UIView.animate(withDuration:, animations:)