【发布时间】:2019-02-13 09:05:09
【问题描述】:
我有一个带有 3 个按钮的水平堆栈视图:音乐应用程序的后退、播放、前进。 这是我当前的代码:
self.controlStackView.axis = .horizontal
self.controlStackView.distribution = .equalSpacing
self.controlStackView.alignment = .center
self.controlStackView.spacing = 10.0
self.controlStackView.translatesAutoresizingMaskIntoConstraints = false
self.contentView.addSubview(self.controlStackView)
self.controlStackView.topAnchor.constraint(equalTo: self.artworkImageView.bottomAnchor, constant: 10.0).isActive = true
self.controlStackView.centerXAnchor.constraint(equalTo: self.contentView.centerXAnchor).isActive = true
这是什么,它按如下方式分配按钮(由于对齐从中心开始):
[backward] - 10 spacing - [play] - 10 spacing - [forward]
我可以增加间距,但它仍然是固定的。 所以我设置了前导和尾随锚来定义堆栈视图的最大宽度:
self.controlStackView.leadingAnchor.constraint(equalTo: self.leadingAnchor).isActive = true
self.controlStackView.trailingAnchor.constraint(equalTo: self.trailingAnchor).isActive = true
这对布局有什么作用:
[left edge backward] - lots of spaaaaaaace - [centered play] - lots of spaaaaaaace - [right edge forward]
它分布在整个宽度上(中心到左右之间有一个 .equalSpacing)。但这也没有帮助。本质上,我的目标是让包括边缘在内的间距真正相等。
假设我的可用宽度为 100,我的 3 个按钮分别为 10、20、10 - 这意味着还有 60 个剩余空间是空的。
我希望它像这样分发:
space - [backward] - space - [play] - space [forward] - space
所以我的按钮之间有 4 个空格,每个空格是 15,所以我们填充了剩余的 60 个空格。 我当然可以实现对堆栈视图的填充以获取外部空间,但这将是非常静态的并且分布不均。
有人知道我是否可以通过将边缘包含在空间分布中的方式来实现它?
谢谢
【问题讨论】:
-
在堆栈视图的开头和结尾添加两个宽度 == 0 的空视图。这不是一个优雅的解决方案,但它确实有效。
-
它确实适用于占位符视图:)
-
间距应该是动态的而不是恒定的。如果我添加更多视图,我还需要调整外部间距常量,在其他设备上它也可能看起来不同
标签: swift uistackview