2

内部のテキスト サイズに基づいて動的にサイズ変更する必要がある 2 つの UILabels を作成する必要がありますUITableViewCell。1 つ目UILabelは(テキストに基づいて) 左に伸び、常に 15 ポイントを右の境界線に揃える必要があります。2 番目UILabelは (これも動的に左側に拡張されます)、最初の UILabel の右側に 7 ポイント配置する必要があります。

... [label 2]<--7p-->[label 1]<--15p-->|right cell border

  1. これはStoryBoard (コードなし)でのみ実行できますか?
  2. sizeToFit:ストーリーボード レイアウトとコードで水平方向の制約を定義しました。水平方向の制約が無効になっていることがわかりました。のフレームを変更しようとしましたviewDidLoad:が、すべてが更新されたわけではありません (遅延 0 でセレクターを実行 - すべてのセルのすべてのラベルを更新しましたが、1 秒の遅延が発生しました)。

アドバイスしてください、ありがとうAsaf

4

2 に答える 2

1

質問1)

実際、コードでそれを行うことができます。しかし、あなたの場合は Interface Builder の方が優れていると思います。

コードで [sizeToFit:] する必要はないと思います。

ラベルに幅の制約を設定しない場合、ストーリーボードに警告があると思います。

UILabel や UIB​​utton などの UIControl には、テキスト コンテンツがあるため、固有のサイズがあります。したがって、幅の制約を設定する必要はありません。

ただし、2 つのラベルがあり、ラベル間に競合がある場合は、どのラベルがより重要であるかを autolayout に知らせる必要があります。- 元。ラベルに長いテキストがある場合、どのラベルのテキストが短縮されずに表示されますか (...)。

これを行うには、Interface Builder で Hugging (または Compression) の優先度を設定します。

質問2)

[viewDidLoad:] はジオメトリの変更には適していません。[viewWillAppear:] の後に UIViewController のビューがビュー階層に追加されます

さらに情報が必要な場合は、お知らせください。

于 2014-07-09T11:27:06.840 に答える
1

コードまたは StoryBoard 自動レイアウトで結果を得ることができます。ストーリーボードの自動レイアウトの手順は次のとおりです。

1.セルに 2 つのラベルがあり、自動レイアウトの制約がないことを確認します (存在する場合はクリアします)。

2.以下に制約を追加しますLabel 1

TwoLabelsCell_Label1_Constraints

3.以下に制約を追加しますLabel 2

TwoLabelsCell_Label2_Constraints

結果:

TwoLabelsCell_Result

備考:

  • updateViewConstraintsレイアウトの操作は、View Controller でオーバーライドして行う必要があります。電話することを忘れないでください[super updateViewConstraints]

  • sizeToFit:あなたの場合、メソッドを扱う必要はありません。

于 2014-07-09T13:37:34.517 に答える