2015-12-20 52 views
49

複数行ラベル(折り返しを折り返しに設定)をスタックビューに配置すると、ラベルは直ちに改行を失い、代わりに1行に表示されます。UIStackViewの複数行ラベル

なぜこのようなことが起こり、スタックビュー内でマルチラインラベルを保持するのでしょうか?

+1

あなたは0に行数を設定しましたか? – dasdom

+0

あなたは答えを見つけましたか? – Brenden

答えて

81
  1. UIViewUILabelを埋め込みます)

UIStackViewは適切にフィットするUIViewを伸ばします、とUIViewは複数行にUILabelを制約します。 UILabelのテキストを設定した後

+0

驚くばかり!これは水平のStackViewのために働く –

+7

それはとても愚かですが、それは動作します!ありがとう !たぶん、ある日、AppleはSDKで半分壊れていないものをリリースするだろう。 –

+0

私が協力していたセットアップでは、これは魅力的だった。私は同意する、愚か。しかし、それは働いた。動いている。 :) – tracicot

5

ラベルの属性インスペクタで行数を0に設定するだけです。それはあなたのために働くでしょう。

enter image description here

+1

垂直スタックビューでは、この機能を有効にするにはDistributionを "Fill"に設定する必要があります。 – SnoopyProtocol

+0

ディストリビューションを「塗りつぶし」に設定することは、修正のキーです。 –

33
  • まずあなたがstackviewに一定の幅を与えない限り、number of lines
  • 0から stackviewはまだ multiLineに成長しないラベルを設定。

enter image description here

我々はstackviewに一定の幅を与えていない場合は、物事が曖昧取得:我々はstackviewの幅を固定するときに示すように、その幅に達したときに、それは複数行に分割します。 stackviewはラベル付きでどれくらい長くなりますか(ラベル値が動的な場合)。

これは、固定幅をstackviewに指定した理由です。

これがあなたの問題を解決できることを願っています。制約をスーパーするUIView(例えば、末尾のスペース、トップスペース、および主要な空間にUILabelを合わせて

  • 使用上の制約(>表示 - - >を埋め込むにはエディタ)

  • +0

    スタックビューの幅が固定ではなく、代わりにデバイス(つまりスーパービュー)の幅に比例する場合はどうなりますか? – OutOnAWeekend

    +0

    はい、比例幅を持つこともできます。ポイントは、何らかの幅の後でラベルを分割する必要があるが、定義する必要がある場合です。あなたは 'UIView'をサブクラス化する場合 – Irfan

    +0

    @AnandKumarあなたはUIViewController''や 'layoutSubviews'であなたのラベルのための' 'viewDidLayoutSubviews'でpreferredMaxLayoutWidth'を指定することができます。固定値を与える –

    1

    IOS9 +

    コール[textLabel sizeToFit]。

    sizeToFitはpreferredMaxWidthを使用して複数行のラベルを再レイアウトします。ラベルは、セルのサイズを変更するstackViewのサイズを変更します。スタックビューをコンテンツビューに固定する以外の追加の制約は必要ありません。

    11

    ビューの1つとしてUIlabelを持つ水平スタックビューの場合、インターフェイスビルダでは最初にUIlabelの行数を0に設定します。これにより、ラベルに1行以上の文字列を含めることができます。これは、スタックビューがalign = fillを持っていたとき、私にとってはうまく動作しませんでした。それを動作させるには、単純にスタックビューのalignment = centerを設定します。ラベルはスタックビュー内の複数の行に展開できるようになりました。

    Apple documentationは、スタックの軸に垂直な サイズを計算するとき、スタック・ビューが各 配置ビューの固有コンテンツSizeプロパティを使用して充填位置合わせを除くすべてのアラインメントについて

    を言う

    ここには以外の単語があります。塗りつぶしが使用されている場合、水平スタックビューは配置されたサブビューサイズを使用して垂直方向にサイズ変更されません。私の場合は

    +0

    これは、ハッキングのない適切な解決策です。ドキュメントを読むことはいつでも報われる! –

    +0

    これは容認された解決策であるべきです。 UIViewの回避策では、私のケースではUILabelのテキストが別のサブビューに浮かんでいました。 – jstorm31

    0

    は、私が以前の提案に従ったが、私のテキストはまだのみ風景の中にかかわらず、単一の行に切り捨てなっていました。判明したのは、目に見えない\0ラベルの文字列にnull文字が見つかりました。それは私が挿入したemダッシュ記号と一緒に導入されているに違いありません。これがあなたのケースでも起こっているかどうかを確認するには、ビューデバッガを使用してラベルを選択し、そのテキストを検査します。

    0
    Add UIStackView properties, 
    stackView.alignment = .fill 
    stackView.distribution = .fillProportionally 
    stackView.spacing = 8.0 
    stackView.axis = .horizontal 
    instead of adding label inside UIView which is not required. 
    If you are using inside UITableViewCell please, reload data on rotation. 
    
    関連する問題