Ios 间距相等的水平正方形
我试着做一行5个相等的正方形(每个50x50),它们之间的间距为20dp。我不想让任何东西拉伸,但同时我想让它这样,如果我隐藏其中一个方块,其他方块就会移动过来 例如:Ios 间距相等的水平正方形,ios,swift,Ios,Swift,我试着做一行5个相等的正方形(每个50x50),它们之间的间距为20dp。我不想让任何东西拉伸,但同时我想让它这样,如果我隐藏其中一个方块,其他方块就会移动过来 例如: +-----+ +-----+ +-----+ +-----+ +-----+ | 50 | 20 | 50 | 20 | 50 | 20 | 50 | 20 | 50 | | x50 | | x50 | | x50 | | x50 | | x50 | +-----+
+-----+ +-----+ +-----+ +-----+ +-----+
| 50 | 20 | 50 | 20 | 50 | 20 | 50 | 20 | 50 |
| x50 | | x50 | | x50 | | x50 | | x50 |
+-----+ +-----+ +-----+ +-----+ +-----+
然后,如果我将中间的方块设置为ishiden=true
,我希望其他方块移到上面:
+-----+ +-----+ +-----+ +-----+
| 50 | 20 | 50 | 20 | 50 | 20 | 50 |
| x50 | | x50 | | x50 | | x50 |
+-----+ +-----+ +-----+ +-----+
这可能吗?我的第一个想法是堆栈视图,但我认为这不可行,因为它们是用来调整间距的。您应该使用堆栈视图。但要隐藏某个正方形,需要将其alpha设置为0,而不是将其隐藏。在这种情况下,布局将保持不变-您可以隐藏一些方块,其他方块将保持其位置。如果需要其他正方形以元素之间的给定间距填充空白,请使用isHidden属性
- 例如,有5个圆:0-0-0-0-0
- 让我们设置3个圆:0-0-0-0
- 现在把3圈的阿尔法设为0:0-0--0-0
StackView
是一个很好的选择,如果您可以使用它的话。如果没有,您还可以:
0.0
。显示项目时,将其设置回50.0
yourWidthConstraint.constant = visible ? 50.0 : 0.0
UIImageView
:
for i in hiddenIndex...lastVisibleIndex-1 {
element[i].image = element[i + 1].image
}
element[lastVisibleIndex].isHidden = true
使用
UIStackView
- 无宽度或尾部约束
- 分配:填充
- 间距:20
- 将
的每个子视图宽度和高度约束设为常数:50
1 2 3 4 5
+-----+ +-----+ +-----+ +-----+ +-----+
| 50 | 20 | 50 | 20 | 50 | 20 | 50 | 20 | 50 |
| x50 | | x50 | | x50 | | x50 | | x50 |
+-----+ +-----+ +-----+ +-----+ +-----+
删除视图#3,方法是:
你现在有:
1 2 4 5
+-----+ +-----+ +-----+ +-----+
| 50 | 20 | 50 | 20 | 50 | 20 | 50 |
| x50 | | x50 | | x50 | | x50 |
+-----+ +-----+ +-----+ +-----+
您将通过以下操作获得相同的结果:
let v = stackView.arrangedSubviews[2]
v.isHidden = true
堆栈视图将隐藏视图#3,从而删除其占用的空间。如果将
.ishiden
设置回false
,视图将重新显示在其原始位置,将视图4和5移回其原始位置。将堆栈视图水平居中于其父视图中,并且不添加前导或尾随约束。我想OP希望布局移过,所以我认为isHidden是很好的不,OP特别希望其他方块移过去,填满现在的空白。他们应该使用hidden=true
,而不是alpha=0
。有3个圆圈:0-0-0。如果将第二个隐藏,结果将是:0-0。如果你把秒的alpha设为0,结果是:0--0。这是UISTK的关键功能(视图)
let v = stackView.arrangedSubviews[2]
v.isHidden = true