Swift 当一些按钮被隐藏时自动布局改变按钮位置
Swift auto layouts change button position when some buttons are hidden
我有自定义 UICollectionViewCell
作为 TaskCell
,我在其中添加了 4 个按钮。
所有按钮都是使用自动布局以编程方式添加的。
现在,当我隐藏一些按钮时,我希望其他剩余的按钮取代隐藏的按钮。检查以下图片。
在这里你可以看到 4 个按钮通过使用 trailingAnchors 对齐到右侧。
现在,如果我隐藏最后两个按钮,即评级和删除按钮,那么我希望其余两个按钮向右移动并取代评级和删除按钮。
下图显示当我隐藏评级和删除按钮时其他按钮保持在同一位置。
最好的方法是什么?
我知道一种方法,我们必须存储 trailingAnchors 并根据我们的条件将其设置为活动 属性。
关注
var deleteTrailingAnchor: NSLayoutConstraint?
deleteTrailingAnchor = deleteButton.trailingAnchor.constraint(equalTo: buttonContainer.trailingAnchor, constant: -8)
deleteTrailingAnchor?.isActive = true
现在我们必须根据需要管理deleteTrailingAnchor
。
有没有更好的方法可以使用 AutoLayouts
.
来解决这个问题
感谢您的帮助。
最简单的方法是为所有按钮添加宽度限制(还将按钮之间的间距设置为 0,并让它们一个接一个地对齐)。然后,当您需要隐藏一个(或多个)按钮时,只需将 isHidden
设置为 true
并将一个(或多个)按钮的宽度约束值设置为 0。它们将隐藏,所有其他按钮将布局到新位置。如果你用 UIView.animate(withDuration:, animations:)
做动画效果会更好
UIStackView
随心所欲
给它顶部、底部和尾部约束,但不是宽度约束。
当您添加/删除已排列的子视图时,它将在单元格中保留 "right-aligned"。
在这里,我有 4 个 UIImageViews "a" "b" "c" 和 "d"。图像视图的宽度限制为 30,宽高比限制为 1:1.
首先,所有 4 个图像视图都在堆栈视图中:
接下来,我删除了 "c":
现在,我删除了 "a" 和 "c":
如您所见,堆栈视图为您处理图像视图的放置。
我有自定义 UICollectionViewCell
作为 TaskCell
,我在其中添加了 4 个按钮。
所有按钮都是使用自动布局以编程方式添加的。
现在,当我隐藏一些按钮时,我希望其他剩余的按钮取代隐藏的按钮。检查以下图片。
在这里你可以看到 4 个按钮通过使用 trailingAnchors 对齐到右侧。 现在,如果我隐藏最后两个按钮,即评级和删除按钮,那么我希望其余两个按钮向右移动并取代评级和删除按钮。
下图显示当我隐藏评级和删除按钮时其他按钮保持在同一位置。
最好的方法是什么?
我知道一种方法,我们必须存储 trailingAnchors 并根据我们的条件将其设置为活动 属性。
关注
var deleteTrailingAnchor: NSLayoutConstraint?
deleteTrailingAnchor = deleteButton.trailingAnchor.constraint(equalTo: buttonContainer.trailingAnchor, constant: -8)
deleteTrailingAnchor?.isActive = true
现在我们必须根据需要管理deleteTrailingAnchor
。
有没有更好的方法可以使用 AutoLayouts
.
感谢您的帮助。
最简单的方法是为所有按钮添加宽度限制(还将按钮之间的间距设置为 0,并让它们一个接一个地对齐)。然后,当您需要隐藏一个(或多个)按钮时,只需将 isHidden
设置为 true
并将一个(或多个)按钮的宽度约束值设置为 0。它们将隐藏,所有其他按钮将布局到新位置。如果你用 UIView.animate(withDuration:, animations:)
UIStackView
随心所欲
给它顶部、底部和尾部约束,但不是宽度约束。
当您添加/删除已排列的子视图时,它将在单元格中保留 "right-aligned"。
在这里,我有 4 个 UIImageViews "a" "b" "c" 和 "d"。图像视图的宽度限制为 30,宽高比限制为 1:1.
首先,所有 4 个图像视图都在堆栈视图中:
接下来,我删除了 "c":
现在,我删除了 "a" 和 "c":
如您所见,堆栈视图为您处理图像视图的放置。