2016-11-17 44 views
1

這是我的代碼 //我的UIViews斯威夫特約束亙古不變的自動佈局的變化,同時隱藏意見

@IBOutlet weak var UIVIewFirst: UIView! 
@IBOutlet weak var UIViewSecond: UIView! 
@IBOutlet weak var UIViewThird: UIView! 

@IBOutlet weak var middleViewHeightConstraint: NSLayoutConstraint! 
@IBOutlet weak var ViewThirdHeight: NSLayoutConstraint! 

有一個按鈕來顯示和隱藏的觀點;

@IBAction func infoClicked(sender: SSRadioButton) { 
    if UIViewSecond.hidden { 
     sender.selected = false 
     UIViewSecond.hidden = false 
     self.middleViewHeightConstraint.constant = 134 

    } else { 
     sender.selected = true 
     UIViewSecond.hidden = true 
     self.middleViewHeightConstraint.constant = 0 
     self.ViewThirdHeight.constant = 180 
    } 
} 

每個視圖之間的垂直間距爲10隱藏的間隙變20.視圖之後但我需要它來設置它10的第三和第二視圖之間。即使我設置第三個視圖高度常數爲任何數字它不會改變它的位置。任何人都可以建議爲什麼會發生這種情況?

+0

使用'view.setNeedsLayout()'在修改限制 –

回答

1

您需要在First-SecondSecond-Third視圖之間採用vertical spacing約束條件的出口連接。此外,如果您想隱藏/僅顯示Second view,則不需要對Third View height constraint進行任何更改。

說,例如,我們採取的vertical spacing between First and Second views的出口處,則:

@IBOutlet weak var UIVIewFirst: UIView! 
@IBOutlet weak var UIViewSecond: UIView! 

@IBOutlet weak var middleViewHeightConstraint: NSLayoutConstraint! 
@IBOutlet weak var verticalSpacingConstraint: NSLayoutConstraint! 

@IBAction func infoClicked(sender: UIButton) 
{ 
    if UIViewSecond.hidden 
    { 
     sender.selected = false 
     UIViewSecond.hidden = false 
     self.middleViewHeightConstraint.constant = 134 
     self.verticalSpacingConstraint.constant = 10 
    } 
    else 
    { 
     sender.selected = true 
     UIViewSecond.hidden = true 
     self.middleViewHeightConstraint.constant = 0 
     self.verticalSpacingConstraint.constant = 0 
    } 
} 

下面是輸出的屏幕截圖:

1.當沒有選擇按鈕

enter image description here

2.當選擇按鈕時

enter image description here

+0

是的,謝謝你:) –

+0

接受答案,如果它爲你工作.. :) – PGDev

1

你還沒有告訴視圖更新與新的約束條件來看,你必須調用此代碼:

self.view.layoutIfNeeded()

+0

我應該在哪裏添加此結束??請elaborate..And這是否支持自動佈局? –

+0

只是在上面的代碼後,你改變你的約束後,你必須調用它,是的,這告訴你的自動佈局佈局再次約束 – Tj3n

+0

對不起,但它不工作.. –

1
firstView 
    | gap = 10 
secondView 
    | gap = 10 
thirdView 

去除secondView

firstView 
     | gap = 10 
    ---------- height = 0 
     | gap = 10 
    thirdView 

所以後差距變爲20

嘗試添加約束在隱藏視圖或減少任何一個間隙後編程。

+0

是的,我知道差距是如何變成20.但我已經給出了第三個視圖的約束,它不工作 –

+0

嘗試使用'setNeedsLayout()'在修改約束的末尾 –

1

約束忽略hidden屬性。

如果可能符合您的要求,請在UIStackView內嵌入您的意見。

請參閱this example

-1

試着改變視圖的框架而不是改變約束,在做任何改變之後也做view.layoutIfNeeded。

+0

爲什麼downvote我的答案? – Aakash

+0

如果使用AutoLayout,則更改視圖的框架不會產生任何影響。 – dfd

+0

它爲我工作,這就是爲什麼我建議嘗試這一點,因爲它有時發生在我試圖改變約束時除了改變框架沒有做任何事情。 – Aakash