2017-05-23 20 views
0

我想在一個UIStackView水平內放置一組自定義視圖。 子視圖中的每一個具有一寬度和高度equal to constant約束:當我將UIStackView發佈版設置爲equalspacing時,爲什麼子視圖不可見?

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。

我想它與擁抱或壓縮抵抗優先權有關,但在subview中設置這些不起作用。

這裏發生了什麼?

+0

首先,你爲什麼不使用故事板? –

+0

@UmerFarooq我必須以編程方式添加子視圖,因爲子視圖的數量無法事先確定。 – NeoWang

+2

對於除'fillEqually'分發之外的所有分發,堆棧視圖在計算沿着堆棧軸的大小時使用每個排列視圖的'intrinsicContentSize'屬性。 – Rahul

回答

1

對於除fillEqually以外的所有分配,堆棧視圖在計算沿堆棧軸的大小時使用每個排列視圖的intrinsicContentSize屬性。

因此,重寫此屬性將工作。

override var intrinsicContentSize: CGSize { return CGSize(your values) } 
相關問題