【问题标题】:Why are subviews not visible when I set UIStackView distribution to equalspacing?当我将 UIStackView 分布设置为等间距时,为什么子视图不可见?
【发布时间】:2017-10-22 22:49:22
【问题描述】:

我想将一组自定义视图水平放置在UIStackView 中。 每个子视图都有一个宽度和高度equal to constant 约束:

 let stack = UIStackView(frame: frameRect)
 stack.axis = UILayoutConstraintAxis.horizontal
 stack.distribution = UIStackViewDistribution.equalSpacing
        
 stack.layoutMargins = UIEdgeInsets(top: 0, left: 40, bottom: 0, right: 40)
 stack.isLayoutMarginsRelativeArrangement = true

 for i in 1...3 {
     let numberView = RotatingNumberView()
     numberView.heightAnchor.constraint(equalToConstant: CGFloat(cellSize))
     numberView.widthAnchor.constraint(equalToConstant: CGFloat(cellSize))
     numberViews.append(numberView)
     stack.addArrangedSubview(numberView)
  }

如果我更改为fillEqually 分布,则会显示子视图,但它们的宽度会被拉伸以填充 stackView。

我猜这与拥抱或抗压优先级有关,但在子视图中设置这些不起作用。

这里发生了什么?

【问题讨论】:

  • 首先,你为什么不使用故事板???
  • @UmerFarooq 我必须以编程方式添加子视图,因为无法事先确定子视图的数量。
  • 对于除fillEqually 分布之外的所有分布,堆栈视图在计算其沿堆栈轴的大小时使用每个排列视图的intrinsicContentSize 属性。
  • 如果子视图是动态的,Collection View 不是一个好的选择吗?
  • 你能添加一些图片吗?你现在的输出?你想要它是什么?如果可能的话?

标签: ios swift autolayout uistackview


【解决方案1】:

对于除fillEqually 之外的所有分布,堆栈视图在计算其沿堆栈轴的大小时使用每个排列视图的intrinsicContentSize 属性。

所以覆盖这个属性会起作用。

  override var intrinsicContentSize: CGSize { return CGSize(your values) }

【讨论】:

    猜你喜欢
    • 2015-06-14
    • 1970-01-01
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    • 2013-02-21
    • 1970-01-01
    相关资源
    最近更新 更多