2017-01-13 25 views
0

我會簡單介紹一下情況:有一個視圖控制器VC和裏面一個視圖V具有以下佈局約束:IOS配售3次,支持自動佈局的另一個視圖內

  • 水平(左,右)間距以VC爲0
  • 垂直(底部只)間隔,以VC爲0
  • 縱橫比75:23

這樣的:

____ 
| | 
| |  
|____|   
|____| <- V 

我想地方的地方3視圖中V,所以可以說我們在4個分五:

___________ 
| | | | | 
| | | | | 
|__|__|__|__| 

I wanna place my new 3 Views V1, V2 and V3 like this: 

___________ 
| | | | | 
| [1][2][3] | 
|__|__|__|__| 

that is, all centered vertically on V middle and the View Vi on (i/4) of V width. 

我怎樣才能做到這一點的故事板(無碼)?

+0

我在下面添加了一個答案,其中的例子描述了我相信你在問什麼。 – Pierce

回答

2

Connor的答案肯定會奏效,你可以做的另一件事是使用NSLayoutConstraint乘數。這裏是步驟:

1)創建三個不同的UIView所有等寬。對於這個例子,我使用了UIImageView,但這與此目的無關。

2)設置每一個具有相同的垂直約束(即50pts從底部,或設置每一個被「垂直居中在容器」

3)向空間出來均勻地在水平平面上,您可以將它們分別設置爲「容器中居中放置」。

enter image description here

4)一旦每個視圖在容器水平居中,改變它們的乘數,以確定的距離在x軸視圖的中心點是從x軸的上海華的中心點。如果你希望三個視圖間隔均勻,我將分別設置乘數(0.5,1.0,1.5)。

enter image description here

下面是顯示出與50的寬度和高度三個視圖圖像:

enter image description here

編輯 - 甚至進一步解釋:

這裏發生的事情是你」將x軸上子視圖的中心重新設置爲與超視圖x軸的中心對齊,但是當您設置乘數時,您告訴它設置了該距離的一小部分。當它設置爲1.0時,你說你想讓子視圖的centerX爲超視圖寬度的0.5倍。當你將乘數設置爲0.5時,你基本上說你想讓子視圖的centerX爲超視圖寬度的1/2(1/2 * 1/2 = 1/4)的0.5,所以你將子視圖的centerX設置爲超視圖寬度的1/4。與1.5相同的東西 - 然後你說你希望子視圖的中心是超視圖寬度的1/2(3/2 * 1/2 = 3/4)的3/2,所以子視圖的centerX將會是超級視圖寬度的3/4。

+0

我有一些堆棧視圖的問題,我不想通過代碼來處理這個問題,所以你的解決方案更好...我發現它有點難以遵循(因爲每一步都給了我奇怪的結果),但是我做到了:) – Daniel

+0

@Daniel - 太棒了!很高興提供幫助,我很高興您能夠排查問題,找到您需要的地方! – Pierce

1

這是一個偉大的案例爲UIStackView。配置容器視圖(V)爲:

let myContainer = UIStackView() 
myContainer.axis = .horizontal 
myContainer.alignment = .center 
myContainer.distribution = .equalCentering 

axis告訴它水平地堆疊子視圖。 alignment給出了非軸的對齊方式;也就是說,它垂直居中每個子視圖。並且equalCentering分佈將告訴堆棧視圖,每個子視圖的中心之間的空間應該相等。

然後,您只需要爲每個子視圖配置每個子視圖的大小(即爲width添加編程約束,除以容器寬度)和addArrangedSubview

相關問題