2017-04-04 28 views
0

View Controllerには、ImageviewとUIViewがあります。 ImageViewがnilまたはimageが利用できない場合、UIViewはその位置を置き換えます。どのように自動レイアウトを使用することが可能ですか?目的をしようとするためにImageViewのサイズに基づいて表示位置を変更します。

enter image description here

、私は(ImageViewのとのUIView)の両方の高さと幅を固定しています。 Imageviewには「上位8ピクセル」と「横方向にコンテナ」の余白があります。 UIViewには「ImageViewからのトップ0」と「コンテナ内での水平方向」のマージンがあります。 Imageviewをnilに設定しても動作しません。

+2

画像= nilのゼロへの画像表示の絶頂制約を作る場合は、コードでそれをしなければなりません。または、スタックビューに入れることができます –

+0

イメージの高さを指定する必要はありません。イメージには、圧縮優先度が必要な場所スペースがあります。画像がない場合は高さは0になりますが、高さがある場合はimage.sizeになります。高さ – Sergey

+0

ありがとうInder Kumarそれは – nadim

答えて

0

これは、自動レイアウトを使用して制約を優先することによって管理できます。 ImageViewとTopLayoutからUIViewのトップスペースを与えてください。上部レイアウトガイドから上部スペースを与えた制約(1000未満の任意の値)に、より低い優先順位を割り当てます。画像がnilの場合、imageview.RemoveFromSuperView()を使用してビューから画像ビューを削除すると、UIViewは自動的にTopLayoutガイドから次の制約を取ります。ストーリーボードの制約の優先順位を見つけるためのスクリーンショットを貼り付けています。

enter image description here

+0

あなたの返事をありがとうございます、しかし、それは動作しません。 UIView位置が変更されず、コントローラから画像ビューが削除されました。 – nadim

0

UIImageViewの高さ制約の出口を取り、コードあなたが求めることができ

if (imageview == nil){ 
    imageViewHeightConstraint.constant = 0 
} 
else{ 
    imageViewHeightConstraint.constant = 60 
} 

そして、他のクエリの下に行います。

1

画像ビューとビューの両方をstackViewに追加し、UIStackView Distribution Fill Equallyに記載されている手順に従うことをお勧めします。

しかし、あなたは下の図および上面レイアウトガイドとの間に追加の制約を追加することによって、あなたが求めているものを達成することができます。その後、

enter image description here

と、より小さくなるようにそのpriority値を設定デフォルト(1000)私の例-in私は0に500-とそのconstant値に設定します。

enter image description here

その外見は点線で表示されなければなりません。これは、ビューのx軸を決定する別の制約があることを意味します。この制約が削除/無効化されている場合、点線のものをアクティブにする必要があります。

最後に、使用可能なイメージがない場合は、隠されたとして、それを設定するか、または0.0へのアルファを設定すると点線の制約を活性化しない、そのスーパービュー(imageView.removeFromSuperview()を呼び出す)から画像表示を削除する必要があることを確認してください:

class ViewController: UIViewController { 
    //... 

    @IBOutlet weak var imageView: UIImageView! 

    // I'm checking in 'viewDidLoad' method just for describing purposes, 
    // of course, you can do the check when needed... 
    override func viewDidLoad() { 
     // if there is something wrong, you should call: 
     imageView.removeFromSuperview() 
    } 

    //... 
} 

出力は次のようになります。

enter image description here

関連する問題