2016-02-22 114 views
-1

我想根據視圖高度以編程方式設置我的約束。例如,我想從視圖設置我的約束頂部等於(self.view.height)* 0.05。然而,據我瞭解它是不可能的,如果你嘗試這樣做,應用程序將引發異常。處理iPad視圖的自動佈局

我用磚石(庫幫助編程易於設置的限制),而且我發現答案:

you cannot relate size attributes (height, width) to position attributes (left, top etc) 

If you wanted 20% margin on both top and bottom you could create a constraint which is 

make.height.equalTo(superview.mas_height).multipliedBy(60/100.0); 
make.center.equalTo(superview.mas_center); 

任何方式來實現這一點?謝謝。

編輯:

例如,該代碼將引發異常:從典型的以編程方式添加約束語法

[imageNewsLabel mas_makeConstraints:^(MASConstraintMaker *make) { 

     make.bottom.equalTo(self.view.mas_height)multiplyBy(0.2); 

它的不同,但我希望戒菸理解明顯。 That will raise an exception: invalid pairing of layout attributes.

+0

@matt my bad。我更新了問題主體。 –

+0

@matt您是否會善意地刪除downvote,因爲我更新了問題主體以符合您的標準。 –

回答

1

您需要添加一個間隔視圖,該視圖將位於視圖和其父視圖邊緣之間。如果您想要保持與iOS 8及以下版本的兼容性,請使用常規視圖(空白,透明),並使用您選擇的倍數約束其高度。如果您只瞄準iOS 9或更高版本,則可以使用UILayoutGuide,它可以做同樣的事情,但不需要UIView的費用。

+0

你的意思是我可以使用相同的片段:make.bottom.equalTo(self.view.mas_height)multiplyBy(0.2);新的隱形視圖? –

+0

不知道'MASConstraintMaker'的確切語法,但是你添加了一個不可見視圖,你的視圖的約束底部=這個不可見視圖的頂部,一個約束底部的不可見視圖=父視圖的底部,約束高度不可見視圖= 0.2 *視圖的高度(或者您實際想要設置的任何約束)。 – jcaron

+0

感謝您的解釋。然而,這是一個額外的工作,我想知道爲什麼我不能簡單地設置約束值簡單地通過它乘以self.view.height的結果multiply .. –