ios - 间距相等的水平正方形

标签 ios swift

我试图制作一排 5 个相等的正方形(每个 50x50),它们之间的间距为 20dp。我不想拉伸(stretch)任何东西,但与此同时我想做到这样,如果我隐藏其中一个方 block ,其他方 block 就会移过去。

例如:

+-----+    +-----+    +-----+    +-----+    +-----+
| 50  | 20 | 50  | 20 | 50  | 20 | 50  | 20 | 50  |
| x50 |    | x50 |    | x50 |    | x50 |    | x50 |
+-----+    +-----+    +-----+    +-----+    +-----+

然后,如果我将中间方 block 设置为 isHidden = true,我希望其他方 block 移过去:

+-----+    +-----+    +-----+    +-----+
| 50  | 20 | 50  | 20 | 50  | 20 | 50  |
| x50 |    | x50 |    | x50 |    | x50 |
+-----+    +-----+    +-----+    +-----+

这可能吗?我的第一个想法是堆栈 View ,但我认为这行不通,因为它们旨在调整间距。

最佳答案

使用UIStackView...

  • 没有宽度尾随约束。
  • 分布:填写
  • 间距:20
  • 给每个 subview 的宽度和高度约束等于常量:50

你最终得到:

   1          2          3          4          5
+-----+    +-----+    +-----+    +-----+    +-----+
| 50  | 20 | 50  | 20 | 50  | 20 | 50  | 20 | 50  |
| x50 |    | x50 |    | x50 |    | x50 |    | x50 |
+-----+    +-----+    +-----+    +-----+    +-----+

删除 View #3:

let v = stackView.arrangedSubviews[2]
v.removeFromSuperview()

你现在有:

   1          2          4          5
+-----+    +-----+    +-----+    +-----+
| 50  | 20 | 50  | 20 | 50  | 20 | 50  |
| x50 |    | x50 |    | x50 |    | x50 |
+-----+    +-----+    +-----+    +-----+

你会得到相同的结果:

let v = stackView.arrangedSubviews[2]
v.isHidden = true

堆栈 View 将隐藏 View #3,移除它占用的空间。如果将 .isHidden 设置回 false, View 将重新出现在其原始位置,将 View 4 和 5 移回其原始位置。

关于ios - 间距相等的水平正方形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66340824/

相关文章:

ios - iOS 有输入和存储街道地址的标准方法吗?

iphone - -[UICollectionViewData numberOfItemsBeforeSection :] 中的断言失败

ios - 大型 UICollectionViewCell 在滚动时消失

ios - 如何在Swift中从输入音频文件生成反相音频文件?

swift - 如何在 iOS 上禁用 IMA UI

ios - 快速的本地通知声音不起作用

ios - 架构 i386 外部框架 XCode 的 undefined symbol

ios - 免费电话桥接 Monotouch

ios - 构建 Cocoapods 模块错误 [ARC] xcodebuild : Returned an unsuccessful exit code

swift - 在 imageView 中心添加标签