2017-06-30 12 views
0

我有這樣的代碼,基於元素的能見度長樂約束:iOS的 - 在運行時更改的限制僅適用第一次

if (self.collectionView.isHidden){ 
    controller.view.bottomAnchor.constraint(equalTo: self.collectionView.topAnchor).isActive = false 
    controller.view.bottomAnchor.constraint(equalTo: self.view2.topAnchor).isActive = true 
} 
else { 
    controller.view.bottomAnchor.constraint(equalTo: self.collectionView.topAnchor).isActive = true 
    controller.view.bottomAnchor.constraint(equalTo: self.view2.topAnchor).isActive = false 
} 

如果我這樣做collectionView.isHidden設置爲true後,它的工作原理。但是,在設置了collectionView.isHidden = true並調用此代碼後,它不再有效,並且controller.view仍然附加到view2的頂部。 還有附接到collectionView螞蟻IST值的高度約束是50.

我也已經嘗試手動設置collectionView.frame.size.height = 50(或一些其它默認值),因爲沒有這一點,collectionView.frame.size.height高度是零。但不行。我曾嘗試致電collectionView.updateConstraints(),但它也沒有效果。

回答

3

所以,我認爲你每次調用這個函數都要設置一個新的約束,你並不是真正去除了前一個。

通常當我需要這樣的邏輯我保持一個參考約束,這樣我可以激活/日後停用它,就像這樣:

var controllerBottomAnchor: NSLayoutConstraint? 

然後我給你它像這樣:

controllerBottomAnchor = controller.view.bottomAnchor.constraint(equalTo: self.collectionView.topAnchor) 
controllerBottomAnchor?.isActive = true 

有一次,我需要改變,我只是使用參考:

controllerBottomAnchor?.isActive = false 

我通常使用它的寬度和高度錨。

+0

謝謝......它的工作。你是對的,我已經咬住了,每次我調用方法時,我的解決方案都會創建新的約束條件。我認爲它以某種方式被緩存,它會始終返回相同的約束,但不會:) –

+1

是的,他們沒有被緩存不幸。很高興你解決了它 – Luca

相關問題