web-dev-qa-db-ja.com

Uilabel幅を動的にサイズ調整する自動レイアウト

ストーリーボードには2つのUILabelsが並んでいます。 2番目のラベルは最初のラベルの右端に突き当たるはずです(1の末尾の制約)が、最大幅に達しない限りコンテンツのサイズに等しい幅を設定するには最初のラベル(左側のラベル)も必要です。視覚的に:


| 1つのテキストにラベルを付ける| |ラベル2のテキスト|


そして、次の制約が必要です。

1)ラベル1は、最大サイズに達しない限り、幅ごとにサイズを変更する必要があります。

2)ラベル2は常にラベル1の右端に突き合わせてください

ストーリーボードでこれを設定するにはどうすればよいですか?

63
Msencenb
  1. ラベルの間に1ポイントの水平スペースを作成します。Controlキーを押しながらlabel2からlabel1にドラッグします。ポップアップから水平間隔を選択します。制約をダブルクリックします。定数を1に変更します。
  2. label1に最大幅を与える:label1を選択します。トップメニューバーに移動し、[エディター]> [ピン]> [幅]を選択します。制約をダブルクリックします。関係を<=に変更し、定数を最大幅に変更します。
  3. ラベルを垂直に揃える:両方のラベルを選択します。上部のメニューバーに移動し、[エディター]> [整列]> [垂直中央]を選択します。
  4. コンテナビューでのラベルの配置方法を定義する制約を設定する必要があります。それはあなたにお任せします。ルートビューの左端からlabel1 32ポイント、上部レイアウトガイドから34ポイントを固定しました。
  5. 上記の制約を反映するようにラベルのフレームを更新します。キャンバスの右下隅にあるメニューバーに移動します。 「自動レイアウトの問題を解決する」タイファイターボタンをタップします。ポップアップで「すべてのフレームを更新…」を選択します。

注:label1の幅にコンテンツサイズを反映させるために、制約を作成する必要がないことに注意してください。コンテンツのサイズ制限は自動的に生成されます。

enter image description here

108
bilobatum

UIlabelとUIButtonの柔軟な幅を設定するには、以下の制約を参照してください。

Set UIlabel and UIButton flexible width according to text using xib autolayout

7
Harshal Wani

最初に以下のコードでtextSizeを取得してください:

    CGSize  textSize = { 230.0, 10000.0 };

    CGSize size = [[NSString stringWithFormat:@"%@", yourLabelText] 
                   sizeWithFont:[UIFont systemFontOfSize:10]
                   constrainedToSize:textSize
                   lineBreakMode:NSLineBreakByWordWrapping]; 

次に、このコンテンツサイズで最初のラベルフレームを設定します。

   UILabel *lblFirst = [[UILabel alloc] initWithFrame:CGRectMake(X, Y, W, size.height)];
   lblFirst.lineBreakMode = YES;
   lblFirst.lineBreakMode = NSLineBreakByWordWrapping;
   lblFirst.numberOfLines =size.height;
   lblFirst.backgroundColor = [UIColor clearColor];
   [self.view addSubview:lblFirst];

2番目のラベルフレームは次のようになります。

 UILabel *lblFirst = [[UILabel alloc] 
 initWithFrame:CGRectMake(lblFollowerName.frame.size.width + lblFollowerName.frame.Origin.x, Y, W, H)];
1
Abhishek Gupta