2016-08-28 9 views
2

における実行時に自動レイアウト制約のUIViewのフレームを変更する、IはPropo呼ばUIViewのフレームの位置を変更するには、このコードを使用する:例えばスイフト

 self.Propo.frame.origin.x -= self.view.frame.width 

Propoがストーリーボード内の制約を有している)

しかし、アプリケーションビューが消えて再び表示されると、UIViewは元の位置にリセットされます。それを解決するにはどうすればよいですか?私はプログラムで変更するときにUIViewの位置を保持します。私は...追記何か他のもので

+0

ビューに制約がある場合は、フレームを変更しないでください。 – matt

答えて

3

制約と手動フレームの操作をupdateViewConstraints()を試してみた

は紛争に直接です。どちらか一方を選択する必要があります。代わりに、Storyboardの@IBOutletとしてCtrlキーを押しながらView Controllerにドラッグすることで、変更したい制約を「昇格」する必要があります。

class MyViewController: UIViewController { 
    @IBOutlet weak var myPropoLeftEdgeConstraint: NSLayoutConstraint! 

    @IBAction doChangePropo(sender: AnyObject) { 
     myPropoLeftEdgeConstraint.constant -= view.frame.width 
     view.layoutIfNeeded() 
    } 
} 

これは、すでに多くの場所でのObjective Cで覆われているが、これだけあなたはこれらの例を読むことができるならば、プログラムコードにNSLayoutConstraintの変更の検索を行います。その後、あなたはその定数を操作することができます。

How to edit constraint in code

(編集がより適用するには:一般的に制約がきれいなユーザーエクスペリエンスのためにアニメ化されなければならないそうしないと目が混乱している。。)

あなたは簡単でview.layoutIfneededをラップすることによって、制約の調整をアニメーション化することができますブロックUIView.animateWithDuration(duration) { ... }

+0

ありがとうBaseZen! – Jbr