2016-09-17 13 views
1

UIImageViewは、自動レイアウトを使用してUITableViewCellに追加されます。自動レイアウトで最大幅の制約を定義する方法は?

UIImageViewの幅は、UITableViewCellの幅の50%である必要がありますが、いずれの場合も50px以下である必要があります。

これは動作しません:

NSLayoutConstraint.activate([ 
     cellImageView.topAnchor.constraint(equalTo: contentView.topAnchor), 
     cellImageView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor), 
     cellImageView.centerXAnchor.constraint(equalTo: contentView.centerXAnchor), 
     cellImageView.heightAnchor.constraint(equalTo: cellImageView.widthAnchor, multiplier: cellImage.size.height/cellImage.size.width), 
     cellImageView.widthAnchor.constraint(equalTo: contentView.widthAnchor, multiplier: 0.5), 
     cellImageView.widthAnchor.constraint(lessThanOrEqualToConstant: 50) 
     ]) 

はどのようにして、レイアウトの制約を定義する必要がありますか?

答えて

2

これはレイアウトライブラリですか?私はあなたのコード内の構文に慣れていないんだけど、あなたの説明に基づいて、それはあなたが望む幅の制約があるように聞こえる:50pt制約より優先順位の低い

  • lessThanOrEqualToConstant: 50
  • equalTo: contentView.widthAnchor, multiplier: 0.5
+0

画像幅がセル幅の50%、最大値の50%の場合、なぜ「greaterThanOrEqualTo」になるのですか?構文はSwift 3です。 – Manuel

+0

ああ、あなたの編集はちょうどそれを逆転しました。私は私の答えを編集します。重要な部分は、第2の制約の優先順位が低いことです。 – Connor

+0

申し訳ありませんが、私の説明が十分にはっきりしていない可能性がありました、私はそれが最大50%以下であることを意味しました。投稿を更新しました:) – Manuel

0

異なる優先度を持つ2つの別々の制約を設定します。 1つの制約は、UILayoutPriority.DefaultHigh優先度(例えば、750)の50%幅であり、第2の制約は、UILayoutPriority.Required優先度(1000)の50 point制約である。これは両方の制約を満たすことを試みるが、コンフリクトが発生した場合(つまり50ポイントを超えた場合)、50%の制約を破ることになります。

+0

私は混乱していますが、あなたは何か違うと言っています(50%の制約を999に設定しています)。このコメントは、50%制約が50pt制約よりも強力であると推測するので、やや混乱します。これが最も強い制約であるため、50%のビューを維持します。 – Firo

+0

申し訳ありませんが、訂正されたコメント申し訳ありません: "50%の制約のためにUILayoutPriority.DefaultHighを設定すると、50ptの制約がなくても効果が出ないため、これはうまくいきませんでした。 50pt制約(デフォルトでは1000)を設定し、50%優先度を999に設定します。だからあなたのソリューションはほとんど仕事をしました:) – Manuel

+0

ああ、それは理にかなっています。説明をありがとう。他の(時にはもっと隠された)アクティブな制約(例えば、抱擁/ストレッチ)が与えられていると、時には「高」では不十分な場合もあります。嬉しい「999」が働いた! – Firo

関連する問題