3

私は 3 つの UIImageViews を含むビューに取り組んでいます。ビューと子イメージビューがストーリーボードに作成されます。これらのイメージビューのイメージはサーバーからロードされます。サーバーが 3 つの画像すべての画像を返すと、次のようになります。

3枚の画像

3番目のイメージビューに使用できるイメージがない場合、レイアウトは次のように動的に変更される必要があります(イメージビューへのイメージのスケーリングなどで、その部分はわかっています):

2枚の画像

私はすでにInterface Builderでかなりの作業をしていますが、これを達成する方法がわかりません..

IBで自動サイズ設定を使用することをお勧めしますか?

4

4 に答える 4

1

この種の自動レイアウトは可能ですが、1 つまたは 2 つの UIImageView を表示しているかどうかに基づいて、1 つの制約をプログラムで変更する必要があります。

自動レイアウトを使用して行う方法は次のとおりです。

コンテナ ビューを作成する

  1. コンテナーとして UIView を作成します。
  2. コンテナー ビューの左端を左マージンに移動します。
  3. コンテナー ビューの右端を右マージンに移動します。
  4. コンテナー ビューの高さを固定します。
  5. スーパービューへの下部スペースの制約を削除します。

UIImageView を作成する

  1. コンテナー ビュー内に 3 つの UIImageView を作成します。
  2. 表示する UIImage ビューのサイズと位置を合わせます。
  3. 最初の画像ビューと 2 番目の画像ビューの間の水平方向の間隔を固定します。
  4. 2 番目と 3 番目の画像ビューの間の水平方向の間隔を固定します。
  5. 最初のイメージ ビューの先頭のスペースをスーパービューに固定します。
  6. 3 番目のイメージ ビューの末尾のスペースをスーパービューに固定します。
  7. 3 つのイメージ ビューをすべて選択し、幅を均等に固定します。
  8. 2 番目のイメージ ビューの align center x 制約を削除します。
  9. 2 番目のイメージ ビューでイメージ ビュー制約への末尾のスペースを選択し、優先度を 900 (重要) に設定します。

Magic Extra Constraint を作成する

  1. 末尾のスペースを 2 番目のイメージ ビューのスーパービューに固定します。
  2. 新しい制約を選択し、優先度を 850 に設定します。
  3. 制約の定数値を 0 に設定します。

コンテナー UIView は、含まれているビューの余白と高さを維持するためのものです。

2 番目のイメージ ビューには 2 つの末尾の制約があり、両方とも点線で表示されます。画面を回転すると、コンテナー ビューが収まるように伸縮し、3 つの UIImageViews も伸縮して収まるようになります。

現在、2 番目と 3 番目の画像ビューの間の制約は、2 番目の画像ビューとコンテナー ビューの間の「魔法の」制約よりも優先度が高いため、2 番目の画像ビューの右端が 3 番目の画像ビューの左端から離されます。2 つの画像だけのレイアウトを調整するには、「マジック」制約を他の制約よりも優先する必要があります。これにより、2 番目の画像ビューの右端がスーパービューの右端に揃えられます。

「魔法の」制約 (2 番目のイメージ ビューのスーパービューへの末尾のスペース) の IBOutlet を作成し、必要に応じて優先順位を上げ下げします。

if (imageCount == 2) {
  // Second image view should favor right edge of superview
  self.myConstraint.priority = 950;
} else if (imageCount == 3) {
  // Second image view should favor left edge of third image view
  self.myConstraint.priority = 850;
}

必要に応じて、3 番目の画像ビューを非表示にすることもできます。

于 2013-06-26T14:07:44.860 に答える
0

私の意見では、配列の数を数えることで、サーバーからの画像の数、つまり3つの画像があるか2つの画像があるかを確認できます。次に、配列カウントに基づいて UIImageView に別のフレームを設定できます。

if([imageArray count] == 3) {

//set the frame of the images so that it can fit the screen.

}
else if([imageArray count] == 2) {

// set the frame of the UIImageView so that it can fit the screen and hide the third UIImageView

[thirdImageView setHidden:YES];

}

このように、UIImageViewのフレームを設定できます

于 2013-06-26T12:40:55.543 に答える