2016-11-17 49 views
1

我有一個upperLabel,一個視圖和按鈕。更改動作視圖上的佈局錨點

ViewDidLoad()方法我給了一些視圖的佈局約束。點擊按鈕時,我需要更新這些約束(即視圖應向下移動)。我怎樣才能做到這一點。

這是我的代碼。但它不起作用。

let keyView = UIView() 

override func viewDidLoad() { 

    keyView.frame = CGRect(x: 0, y: 0, width: 100, height: 30) 
    keyView.backgroundColor = UIColor.cyan 
    keyView.translatesAutoresizingMaskIntoConstraints = false 
    containerView.addSubview(keyView) 
    keyView.topAnchor.constraint(equalTo: upperLabel.bottomAnchor , constant: 10).isActive = true 
    keyView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: 20).isActive = true 
    keyView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: -20).isActive = true 
    keyView.bottomAnchor.constraint(equalTo: keyView.topAnchor, constant: keyView.frame.size.height).isActive = true 
} 

該操作中的代碼如下。

func buttonAction(sender: UIButton!) { 

    keyView.translatesAutoresizingMaskIntoConstraints = false 
    keyView.topAnchor.constraint(equalTo: upperLabel.bottomAnchor, constant: CGFloat(i*50)) 
    keyView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: 20) 
    keyView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: -20) 
    keyView.bottomAnchor.constraint(equalTo: keyView.topAnchor, constant: keyView.frame.size.height) 
    i + =1 
} 

根據上面的代碼,keyView應該單擊按鈕向下移動。但它並沒有下移。

請幫我一把。 在此先感謝。

+0

爲什麼不取消對行動 –

+0

是啊,我都甚至試圖以前的佈局限制和約束的AddNew,通過使初始約束.isActive =假的..然後我增加了新的限制。 –

回答

0

以一個全局變量的類型是NSLayoutConstraint這是如下的..

VAR keyViewTopConstraint:NSLayoutConstraint?

現在在viewDidLoad同時給出初始約束。如下給出

keyViewTopConstraint = keyView.topAnchor.constraint(equalTo: upperLabel.bottomAnchor , constant: 10) 
    keyViewTopConstraint?.isActive = true 

現在在那個行動。刪除初始約束並創建另一個約束並使其處於活動狀態。對於做如下

keyViewTopConstraint?.isActive = false 
    keyViewTopConstraint = keyView.topAnchor.constraint(equalTo: upperLabel.bottomAnchor, constant: CGFloat(i*50)) 
    keyViewTopConstraint?.isActive = true