2017-01-18 9 views
1

が、私はこれを行うと言う...この制約を追加したり、変更したりしていますか?

override func viewDidLoad() { 
    super.viewDidLoad() 
    view.heightAnchor.constraint(equalToConstant: 50).isActive = true 

後に、私はこれを行う...

view.heightAnchor.constraint(equalToConstant: 51).isActive = true 

は、私は悪い人ですか?

は、私は今、重複(最初に何が起こるのか?)第2の制約を追加

それとも最初を変更するために知っていることがありますか?

他に何か起こりますか?私はリークをしていますか?

私は何をすればよいでしょうか、どのようにして悪いことがありましたか?

ここで正しいことは何ですか?

答えて

3
view.heightAnchor.constraint(equalToConstant: 50).isActive = true 

後に、私はこれを行う...

view.heightAnchor.constraint(equalToConstant: 51).isActive = true 

は、私は悪い人ですか?

はい、私が間違っていない場合は、コンフリクトがない(矛盾した)制約があることを警告するコンソールの大きなメッセージでランタイムに通知されます。高さを50に設定する制約と、高さを51に設定する制約があり、両方とも真ではありません。

あなたはあなたのケースで何が起こっているのを確認するために十分なコードを与えていないが、あなたは簡単に私が言っていることは、あなたのビューコントローラのコードを作ることによって、正しいことが確認できるだけで次のものから構成されます

func delay(_ delay:Double, closure:@escaping()->()) { 
    let when = DispatchTime.now() + delay 
    DispatchQueue.main.asyncAfter(deadline: when, execute: closure) 
} 
class ViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     let v = UIView() 
     v.translatesAutoresizingMaskIntoConstraints = false 
     self.view.addSubview(v) 
     v.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true 
     v.leadingAnchor.constraint(equalTo: self.view.leadingAnchor).isActive = true 
     v.widthAnchor.constraint(equalToConstant: 100).isActive = true 
     v.heightAnchor.constraint(equalToConstant: 50).isActive = true 
     delay(3) { 
      v.heightAnchor.constraint(equalToConstant: 51).isActive = true 
     } 
    } 

} 

あなたが規定しているように、私たちは51の制約を "後で"加えます - そして、私が言ったように、ランタイムはその瞬間を捉えます。

正しい手順を使用すると、後でそのconstantを変更することができるように元の制約 を参照を保つにあります。 (もっと複雑な状況下では、実際には2番目の制約を追加する前に最初の制約を無効にすることができます(つまり、最初の制約を取り除くことはできますが、変更する場合はconstantを変更する必要はありません)。

+0

Matt彼のコードをそのまま残し、制約を変更した後に 'setNeedsUpdateConstraints'を呼び出します。 –

+0

@MSU_Bulldogいいえ。彼は制約を変更しませんでした(制約を置き換えませんでした)。彼は第二の高さの制約を加えました。それが私の主張です。 – matt

+0

このビューの制約にアクセスして参照を作成せずに更新する方法はありませんか?私はちょうどここで最高のユースケースに興味があります。 5つの異なる制約を更新する必要がある場合は、個々の制約ごとに5つの参照を持つことは望ましくありません。 –

関連する問題