2017-12-22 10 views
0

私はストーリーボードで作成されたビューをたくさん持っていますが、毎回IBOutletを使用せずに制約を動的に更新できるようにしたいと考えています。IBOutletまたはIdentifierなしでストーリーボードから制約を更新するにはどうすればよいですか?

私は更新したいビューのスーパーのためのカスタムクラスを作ることによって開始され、次のようにそのサブビューの下の制約を変更:

myView.constraints.filter{ $0.firstAnchor is NSLayoutAttribute.bottom }.constant -= 200 

「NSLayoutAttribute.bottom」であるとは思えませんアンカーのタイプをチェックする正しい方法。

変更したい制約の種類を確認するにはどうすればよいですか?

私は変更したいビューのスーパービューの制約を更新するのではなく、ビュー自体を変更しますか?

+0

更新が必要な理由あなたの制約?特別な要件はありますか? –

+0

更新された制約は、ビューを動的にキーボードの外に移動させます。私はこれをカスタムクラスとして欲しかったので、そうでなければカスタム実装を必要としないすべてのビューに対して同じ機能を書き直す必要はありません – caziz

+0

制約を更新する代わりにビューフレームを設定し、アニメーションに 'uiview.animation'を使用します。 [こちらを参照してください](https://www.raywenderlich.com/173544/ios-animation-tutorial-getting-started-3) –

答えて

0

NSLayoutConstraint iOS7のコードはidentifierで、コードまたはIBからこのプロパティを設定できます。
あなたが探している制約を得るには、特定のビューでそれを検索するだけです。
このUIView拡張考えてみましょう:dahlia_boyの提案を1として

func constraint(withIdentifier:String) -> NSLayoutConstraint? { 
     return constraints.filter{ $0.identifier == withIdentifier }.first 
    } 
+0

私は望むすべてのビューの識別子を作成する必要はありませんこの機能。制約タイプで検索する方法はありますか? – caziz

+0

はい、この回答を確認してくださいhttps://stackoverflow.com/questions/26833641/ios-find-top-constraint-for-a-view – Andrea

+0

また、このプロジェクトはGitHubのErica Sadunから受け付けています。https://github.com/erica/自動レイアウト - 不確定/ツリー/マスタ/ 2次/制約= 20Pack/Constraint%20Matching – Andrea

0

を、私はしかし、永久的ではないようです、この機能を実現するためにUIView.animateを使用:

translatesAutoresizingMaskIntoConstraints = true 
UIView.animate(withDuration: 1, animations: { 
    self.frame.size.height -= 200 
}) 
関連する問題