web-dev-qa-db-ja.com

UIViewの一定の高さの制約をプログラムで更新する方法

私はUIViewを持っていて、Xcode Interface Builderを使って制約を設定します。

今度はそのUIView'sの高さ定数をプログラムで更新する必要があります。

myUIView.updateConstraints()のような機能がありますが、使い方がわかりません。

71
Chris Mikkelsen

Interface Builderから高さの拘束を選択して、その出口を選択します。そのため、ビューの高さを変更したい場合は、以下のコードを使用できます。

yourHeightConstraintOutlet.constant = someValue
yourView.layoutIfNeeded()

メソッドupdateConstraints()UIViewのインスタンスメソッドです。プログラムで制約を設定しているときに役立ちます。ビューの制約を更新します。詳細については、 をクリックしてください

152
Parth Adroja

複数の制約を持つビューがある場合、複数のアウトレットを作成しなくてもはるかに簡単な方法は次のようになります。

インターフェイスビルダーで、識別子を変更したい各制約を与えます。

enter image description here

それからコードであなたはそのように複数の制約を修正することができます:

for constraint in self.view.constraints {
    if constraint.identifier == "myConstraint" {
       constraint.constant = 50
    }
}
myView.layoutIfNeeded()

複数の制約に同じ識別子を指定することで、制約をまとめてまとめて変更することができます。

82

HeightConstraintを作成せずにWidthConstraintIBOutletを変更します。

注:ストーリーボードまたはXIBファイルで高さまたは幅の制限を割り当てます。この拡張子を使ってこのConstraintを取得した後。

この拡張を使って高さと幅を取得することができます。

extension UIView {

var heightConstaint: NSLayoutConstraint? {
    get {
        return constraints.first(where: {
            $0.firstAttribute == .height && $0.relation == .equal
        })
    }
    set { setNeedsLayout() }
}

var widthConstaint: NSLayoutConstraint? {
    get {
        return constraints.first(where: {
            $0.firstAttribute == .width && $0.relation == .equal
        })
    }
    set { setNeedsLayout() }
}

}

あなたが使用することができます

yourView.heightConstaint?.constant = newValue 
18
AshvinGudaliya

制約をIBOutletとしてVCにドラッグします。それからあなたはそれに関連する値(そして他のプロパティ。ドキュメントをチェックする)を変更することができます。

@IBOutlet myConstraint : NSLayoutConstraint!
@IBOutlet myView : UIView!

func updateConstraints() {
    // You should handle UI updates on the main queue, whenever possible
    DispatchQueue.main.async {
        myConstraint.constant = 10
        myView.layoutIfNeeded()
    }
}
9
dylanthelion

以下のコードのようにIBOutletを作成するために、まずHeight拘束をビューコントローラに接続します。

@IBOutlet weak var select_dateHeight: NSLayoutConstraint!

次に、以下のコードをロードまたはアクション内に表示します。

self.select_dateHeight.constant = 0 // we can change the height value

ボタンクリックの内側にある場合

@IBAction func Feedback_button(_ sender: Any) {
 self.select_dateHeight.constant = 0

}
4
Nimisha joshy

必要に応じて、スムーズなアニメーションで制約を更新することができます。以下のコードの塊をご覧ください。

heightOrWidthConstraint.constant = 100
UIView.animate(withDuration: animateTime, animations:{
self.view.layoutIfNeeded()
})

上記の方法でうまくいかない場合は、Dispatch.main.async {}ブロックで必ず更新してください。そのときにlayoutIfNeeded()メソッドを呼び出す必要はありません。

3
Nupur Sharma

レイアウト制約を更新するには、定数プロパティを更新し、あとでlayoutIfNeededを呼び出すだけです。

myConstraint.constant = newValue
myView.layoutIfNeeded()
1
Fran Martin
Create an IBOutlet of NSLayoutConstraint of yourView and update the constant value accordingly the condition specifies.

//Connect them from Interface 
@IBOutlet viewHeight: NSLayoutConstraint! 
@IBOutlet view: UIView!

private func updateViewHeight(height:Int){
   guard let aView = view, aViewHeight = viewHeight else{
      return
   }
   aViewHeight.constant = height
   aView.layoutIfNeeded()
}
1
CrazyPro007