2016-11-17 1 views
1

私は1つのupperLabel、1つのビューとボタンを持っています。アクション上のビューのレイアウトアンカーの変更

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

はなぜうん、私は偽.isActive =として初期制約を行うことで、でもそれを試してみました...そして私は新しい制約を追加したアクション –

+0

上の以前のレイアウト制約とAddNewの制約を取り除くいけません。 –

答えて

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 
関連する問題