web-dev-qa-db-ja.com

UIImageViewAspectRatio制約をプログラムでSwift 3

ストーリーボードにAspectRatioが1:1のUIImageViewがあり、場合によってはViewControllerでプログラムで2:1に変更したいと考えています。 ViewControllerでその制約の参照を作成しましたが、制約を設定できません。

6
Shariif Islam

Swift 3でプログラムで制約を変更できます

let aspectRatioConstraint = NSLayoutConstraint(item: self.YourImageObj,attribute: .height,relatedBy: .equal,toItem: self.YourImageObj,attribute: .width,multiplier: (2.0 / 1.0),constant: 0)
self.YourImageObj.addConstraint(aspectRatioConstraint)
10
Jugal K Balara

Appleのガイド に記載されているように、プログラムで制約を設定するには3つの方法があります。

  • レイアウトアンカーを使用できます
  • NSLayoutConstraintクラスを使用できます
  • ビジュアルフォーマット言語を使用できます

制約を設定するための最も便利で流暢な方法は、レイアウトアンカーを使用することです。

ImageViewのアスペクト比を変更するのは1行のコードだけです

imageView.heightAnchor.constraint(equalTo: imageView.widthAnchor, multiplier: 1.0/2.0).isActive = true

Result View

"[LayoutConstraints]制約を同時に満たすことができません。"ImageViewの高さ制約への参照を追加してから、非アクティブ化する必要があります。

heightConstraint.isActive = false
10
Eugene Brusov

制約条件に応じて、制約の乗数を0.5または2に設定します。2:1になります

0