私が持っているUIView
と私はXcodeのインタフェースBuilderを使用して制約を設定します。
次に、プログラムでそのUIView's
高さ定数を更新する必要があります。
のような機能がありますが、myUIView.updateConstraints()
使い方がわかりません。
私が持っているUIView
と私はXcodeのインタフェースBuilderを使用して制約を設定します。
次に、プログラムでそのUIView's
高さ定数を更新する必要があります。
のような機能がありますが、myUIView.updateConstraints()
使い方がわかりません。
回答:
Interface Builderから高さ制約を選択し、そのアウトレットを取得します。したがって、ビューの高さを変更したい場合は、以下のコードを使用できます。
yourHeightConstraintOutlet.constant = someValue
yourView.layoutIfNeeded()
メソッドupdateConstraints()
はのインスタンスメソッドですUIView
。プログラムで制約を設定する場合に役立ちます。ビューの制約を更新します。詳細については、ここをクリックしてください。
複数の制約のあるビューがある場合、複数のアウトレットを作成する必要がないはるかに簡単な方法は次のとおりです。
インターフェイスビルダーで、識別子を変更する各制約を指定します。
次に、コードで次のように複数の制約を変更できます。
for constraint in self.view.constraints {
if constraint.identifier == "myConstraint" {
constraint.constant = 50
}
}
myView.layoutIfNeeded()
複数の制約に同じ識別子を付けることができるため、制約をグループ化して、一度にすべて変更できます。
変更しHeightConstraint
、WidthConstraint
作成せずにIBOutlet
。
注:ストーリーボードまたはXIBファイルで高さまたは幅の制約を割り当てます。この拡張機能を使用してこの制約をフェッチした後。
この拡張機能を使用して、高さと幅の制約を取得できます。
extension UIView {
var heightConstraint: NSLayoutConstraint? {
get {
return constraints.first(where: {
$0.firstAttribute == .height && $0.relation == .equal
})
}
set { setNeedsLayout() }
}
var widthConstraint: NSLayoutConstraint? {
get {
return constraints.first(where: {
$0.firstAttribute == .width && $0.relation == .equal
})
}
set { setNeedsLayout() }
}
}
以下を使用できます。
yourView.heightConstraint?.constant = newValue
first(where: ...)
代わりにすぐに使用できる方法がありますfilter
first
制約をIBOutletとしてVCにドラッグします。次に、関連する値(およびその他のプロパティ。ドキュメントを確認)を変更できます。
@IBOutlet myConstraint : NSLayoutConstraint!
@IBOutlet myView : UIView!
func updateConstraints() {
// You should handle UI updates on the main queue, whenever possible
DispatchQueue.main.async {
self.myConstraint.constant = 10
self.myView.layoutIfNeeded()
}
}
必要に応じて、スムーズなアニメーションで制約を更新できます。以下のコードのチャンクを参照してください。
heightOrWidthConstraint.constant = 100
UIView.animate(withDuration: animateTime, animations:{
self.view.layoutIfNeeded()
})
まず、以下のコードのようにIBOutletを作成するために、高さ制約をビューコントローラーに接続します
@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
}
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()
}