次のように動作する2つのUILabelサブビューを使用してコンテナビューをプログラムで作成しようとしています。
- コンテナの幅はそのスーパービューに固定されています。その高さはラベルに合うように制限されています
- ラベルは、標準の間隔で水平に配置されます(8ポイント)
- 左側のラベルの幅は、コンテナの幅の25%です。
- 右側のラベル幅は、標準の水平方向の間隔を差し引いた、使用可能なスペースを埋めます
- 長いテキストは単語の境界で分割する必要があります。複数の行にまたがって流れます。長いテキストに対応するには、両方のラベルを垂直方向に拡大する必要があります
numberOfLines = 0
とでラベルを定義しましたlineBreakMode = NSLineBreakByWordWrapping
。
コンテナのサイズは完全に動的であることに注意してください。その幅はそのスーパービューによって決定され、その高さはそのサブビュー(ラベル)によって決定されます。ラベルのサイズも動的です。それらの幅はコンテナの幅に比例し、それらの高さはテキストの長さに依存します。
次の制約(擬似コード)を使用して、最後の項目を除いて、上記のすべてを達成することができました。Aは左側のラベル、Bは右側のラベルです。
- A.top == container.top
- B.top == container.top
- A.leading = container.leading
- A.trailing == B.leading-8
- B.trailing == container.trailing
- A == .25 * container.width
- container.height> = A.height
- container.height> = B.height
最後の2つの制約は、ラベルの背の高い方に合うようにコンテナーを拡張することを目的としていますが、レイアウトエンジンは、ラベルが複数行である可能性があるという事実を無視しているようです。つまり、テキストの長さに関係なく、常に1行が表示されます。
では、上記の動作の完全なセットを実現するには、どのような制約を追加/変更/削除する必要がありますか?