【问题标题】:UIStackView; Equal Spacing Between & Outside ElementsUIStackView;元素之间和外部元素之间的相等间距
【发布时间】:2017-08-20 02:27:45
【问题描述】:

UIStackView 很棒,我喜欢等间距分布。 但是如何在元素之外动态地实现相同的空间呢? 在我的情况下,所有元素都将具有相同的比例 1:1

【问题讨论】:

  • UIStackView的开头和结尾添加宽度为1.0f的透明元素
  • 它不会给我与元素之间相同的间距
  • @AdamSmaka 我也在尝试这样做。似乎是一个中心用例。在我的例子中,要将变量添加到组合中,大小(在我的例子中是高度,我使用的是垂直堆栈视图)以及内容会有所不同。还真没找到好方法。

标签: ios swift autolayout uistackview


【解决方案1】:

您可以使用故事板添加相等的间距,如下所示:

来源:https://stackoverflow.com/a/32862693/3393964

【讨论】:

  • 我想以编程方式在 stackView 中添加和删除项目,所以这个静态的 uiview 数量并不能解决我的问题,但它很接近
  • 请告诉我如何以编程方式为空视图添加相等的空间,以便我将您的答案标记为已接受。这是我的案例中最后一个缺失的元素。
  • @AdamSmaka 查看这篇文章,了解如何以编程方式添加约束stackoverflow.com/a/26181982/3393964
【解决方案2】:

我更喜欢让UIStackView 处理间距。创建一个具有相等间距的UIStackView,并在堆栈视图的远端添加两个 0px 宽(如果使用垂直堆栈视图,则为 0px 高)透明视图。

【讨论】:

    【解决方案3】:

    @Declan 的想法是正确的。这是以编程方式回答的问题,您可以在任一侧添加额外的视图,以便堆栈视图使用任意数量的按钮提供正确的外部间距。

    stackView.alignment = .center
    stackView.axis = .horizontal
    stackView.distribution = .equalCentering
    
    // Then when I add the views...
    let leftView = UIView()
    stackView.addArrangedSubview(leftView)
    content.buttons.forEach { (button) in
      stackView.addArrangedSubview(button)
    }
    let rightView = UIView()
    stackView.addArrangedSubview(rightView)
    

    这是我使用 equalSpacing 的 2 个项目的视图

    这里是equalCentering 分布,看起来也不错。

    【讨论】:

      【解决方案4】:

      您可以使用约束并给出相同的高度和宽度。因此,当您更改任何组件的尺寸时,所有组件都会更改为相同的尺寸。

      【讨论】:

      • 组件会改变,但我需要改变间距来改变
      【解决方案5】:

      我认为您想要的是在堆栈视图外部具有相同的间距与外部间距。

      我要做的是将堆栈视图放入另一个视图(灰色视图)中,并将堆栈视图的 leadingtrailing constraint 设置为等于 间距。

      堆栈视图的间距

      堆栈视图的超级视图(灰度视图)的约束

      【讨论】:

      • 没关系,但如果我删除一个元素间距不会动态变化