2016-10-24 17 views
0

イメージのようにストーリーボードを作成しました。その中で私は赤いビューとtableViewの間の垂直方向の間隔を20に設定しています。 enter image description hereiosで制約が自動的に更新されない

しかし、赤いビューの高さを変更しようとすると、追加した制約がテーブルビューに表示されるはずですが、テーブルビューは同じ場所に一定のままです。

私はあなたがredViewの高さを操作するための自動レイアウトを使用する必要があり、次のコード

redView.frame.size = CGSize(width: 1008, height: 0) 
self.view.layoutIfNeeded() 
+0

赤いビューとtableViewに与えた他の制約を表示できます –

+0

redViewの高さはビューの高さに等しいですか?そして、あなたはredViewの高さを0に変更していますか? –

答えて

0

を使用。フレームのサイズを変更するのはAutolayoutではありません。高さの制約を修正する(存在する場合)

0

フレームや制約を使用する必要があります。両方をすることはできません!

あなたがする必要があるのは、あなたの制約へのコンセントの参照を作成し、代わりにその定数値を変更することです。

0

viewdidloadまたはviewwillappearにコードを配置すると、このような問題が発生します。すべての制約がロードされた後にコードを配置する必要があります。

また、高さ制約のオブジェクトを作成し、たとえば、redViewHeightという名前を付けます。 とその値を次のように変更します。redViewHeight.constant = 0

これは機能します。

+0

私のコードはviewDidAppear()にあり、あなたが指定したコードを試しました –

+0

redviewとmainviewの間の比重を使いましたか? –

+0

その比例制約を削除し、一定の高さ制約を追加します。 次に、その一定の高さのコンセントを例えばredViewHeightのコンセントにします。 必要な場所にredViewHeight.constant = 0を置きます。 などの場合は、redViewHeight.constant = proportionality ratio * screenHeightを入力します。 ここでscreenHeight = [UIScreen mainScreen] .bounds.size.height –

0

ビューの制約を次のように置き換えます。

  1. Redview

    Top constraint to ParentView
    Leading Constraint to ParentView
    Trailing constraint to ParentView
    Height Constraint

  2. テーブルビュー

    Top constraint to RedView
    Leading Constraint to ParentView
    Trailing constraint to ParentView
    Bottom constraint to ParentView

今RedViewのHeightConstraintためIBOutletを配線し、そのconstant値を変更します。 UITableViewは、望みどおりに高さを調整します。

0

ストーリーボード上の任意のオブジェクトに制約を追加するときはいつでも、そのオブジェクトのフレームはautolayoutエンジンによって維持されます。これは私が推測する主要な設計原理です。この場合、単純に行うことができるのは、コード内でその制約を更新および更新する必要のある制約のコンセントを作成することだけです。あなたの理解のために私はスクリーンショットを添付しています。

enter image description here

次のように今制約コンセントを行った後、それは次のように見なければなりません。

@IBOutlet weak var containerViewHeight: NSLayoutConstraint! 

ここで高さを更新するには、1つのことを行うだけです。私の意見で

containerViewHeight.constant = 0 

このアップデートはviewDidLoadが、その後呼び出されるときのiOSのレイアウトが正常に適用されないため、その後の内部viewDidLayoutSubviewsを更新してくださいviewDidLoadまたはviewWillAppear内部の作業をされていない場合。私が何をするか私の場合は

がある -

override func viewDidLayoutSubviews() { //This ensures all the layout has been applied properly. 
    super.viewDidLayoutSubviews() 
    containerViewHeight.constant = 0 
} 

注: - あなたは次のようにのようなUIViewアニメーションブロック内でこの制約更新プログラムを適用することができ、レイアウトの変更中にいくつかの素晴らしいアニメーション効果を達成するために。しかし、効果を確認するために、覚えてきれいにあなたはどんな間違いのために後viewDidAppearなど

UIView.animateWithDuration(1.0, delay: 0.2, usingSpringWithDamping: 8.0, initialSpringVelocity: 1.0, options: UIViewAnimationOptions.CurveEaseIn, animations: { 
    containerViewHeight.constant = 0 
    self.view.layoutIfNeeded() 
}, completion: nil) 

のように適切に申し訳ありませんがビューを提示した後、これを呼び出す必要があります。 更新/編集は大歓迎です。

これが役に立った。ありがとう

関連する問題