【问题标题】:Swift auto layouts change button position when some buttons are hidden隐藏某些按钮时,Swift自动布局会更改按钮位置
【发布时间】:2019-02-28 21:24:31
【问题描述】:

我有自定义UICollectionViewCellTaskCell,我在其中添加了 4 个按钮。 所有按钮都是使用自动布局以编程方式添加的。

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

在这里您可以看到使用 trailingAnchors 对齐到右侧的 4 个按钮。 现在,如果我隐藏最后两个按钮,即评级和删除,那么我希望剩下的两个按钮向右移动并取代评级和删除按钮。

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

最好的方法是什么?

我知道一种方法,我们必须存储 trailingAnchors 并根据我们的条件设置它的活动属性。

喜欢关注

var deleteTrailingAnchor: NSLayoutConstraint?

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

 deleteTrailingAnchor?.isActive = true

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

有没有更好的方法使用AutoLayouts来解决这个问题。

感谢您的帮助。

【问题讨论】:

  • 为什么不把所有的按钮都放在一个 stackView 中?
  • 为按钮添加宽度约束并将 NSLayoutConstraint 设置为该宽度约束
  • 使用水平堆栈视图
  • 我试过UIStackView,当只剩下两个图标时,两个图标都占用了太多空间,因为stackView的宽度最初是4个按钮,当隐藏2个时,整个stackview宽度用于剩下的两个和两个按钮之间的间距变大了。
  • stackview 可能没用,因为在 stackview 中隐藏其他视图时会遇到同样的问题

标签: ios iphone swift ios-autolayout


【解决方案1】:

UIStackView 会做你想做的事。

给它顶部、底部和尾随约束,但不是一个宽度约束。

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

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

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

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

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

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

【讨论】:

  • 这很好用,我已经删除了 UIStackView 的 widthConstraints,现在它会根据内容的大小自行调整。
【解决方案2】:

最简单的方法是为所有按钮添加宽度约束(也将按钮之间的空间设置为 0,并让它们一个接一个地对齐)。然后,当您需要隐藏一个(或多个)时,只需将一个(或多个按钮)的 isHidden 设置为 true 并将宽度约束值设置为 0。它们将隐藏,所有其他按钮将为新位置布局。如果你用UIView.animate(withDuration:, animations:)动画它会更好看

【讨论】:

    猜你喜欢
    • 2014-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多