2017-03-21 8 views
0

「ラベル1」と「ラベル2」の2つのラベルが並んでいます。 「ラベル1」のコンテンツが利用できない場合、「ラベル2」は「ラベル1」の位置に置き換えられます。自動レイアウトを使用してどのように可能か知っていますか? enter image description here自動レイアウトを使用してラベルの位置を変更する

試してみると、両方のラベルの高さと重さが固定されています。 「ラベル1」は先頭と8ピクセルマージンを持ち、「ラベル2」は先頭に0ピクセル、先頭に8ピクセルあります。 "Label 1"のサイズを "0"に設定し、 "Label 1"を非表示にしますが動作しません。

+0

ませ制約は 'ラベル2 width'の' IBOutlet'を取りませんし、それに応じて 'constant'値を設定しLABEL1

enter image description here

を非表示にします。 –

+0

あなたはコンセントを使ってそれを行うことができます。単に幅のコンセントを作成し、ラベル1が空の場合は定数を0に設定します。 –

+0

大きな固定幅が必要ですか?または、テキストに合わせてラベルのサイズを自動的に調整しますか? – DonMag

答えて

1

両方のラベルの幅制約を削除し、必要に応じて(サイズインスペクタの)要件に応じて、ラベルの更新(設定)圧縮/ハギングの優先順位を設定します。

問題を解決しますが、autoLayoutは、両方のラベルが同じ行(ポイント)に水平に配置されているため、コンテンツの表示優先度が競合する可能性があります。この競合を解決するには、両方のラベルのいずれかの圧縮/ハギングの優先順位を更新する必要があります。

いずれか1つ(または両方)のラベルテキストに値がない場合は、その値にnil値を設定すると、そのフレーム(スペース)は自動的に他のラベルで占有されます。両方のラベルテキストにnil値があると、両方とも消えてしまいます(自動的に幅をゼロに設定します)。

enter image description here

+0

私はあなたの措置を踏んだが、それは私に紛争を示すものではない。 – nadim

+0

ラベル1に先行するコンスタントを設定しましたか?あなたの問題は解決したのか、まだこの問題に直面していますか?幅を削除することで、問題は解決されます。ラベルを表示したくない場合は、ラベルテキストにnil値を設定するだけです。 – Krunal

+1

どうもありがとうございます。 – nadim

1

両方のラベルの幅が固定されている場合は、両方のラベルに一定の幅を設定します。 Lable2の先頭スペースをlabel1に対して '0'に設定します。 Label1の幅にNSLayoutConstraintを追加します。今度はプログラムで、Lable1の内容が空白であることが判明したら、widthレイアウト制約を '0'に設定します。 Lable2は自動的に左に移動し、Label1の場所に座ります。

+0

"両方のラベルに一定の幅を設定する"とは、両方のラベルの幅が等しいことを意味しますか? – nadim

+0

これはあなたの要件に基づいています。ラベルが固定長の文字列を保持する場合は、一定の幅の値を設定します。ラベルが文字列の可変/動的長さを保持する場合は、幅の値を割合で設定します。しかし、私は下記のKrunalの答えに行くことをお勧めします。 –

+0

よろしくお願い申し上げます。ありがとうございます。 – nadim

0

あなたはLabel2を幅制約のIBOutletを作成する必要があり、あなたはのLabel1の内容をチェックする必要があります。それが空白の場合、0に設定し、layoutIfNeededに電話をかけてビューフレームをリセットする必要があります。

0

圧縮/ハギングのプロパティで作業したくない場合は、次に、コンテンツがない場合は、stackviewにラベルを埋め込み、ラベルを隠すことができます。

enter image description here

とするとき、私は必要な:)

関連する問題