iOS 6.0 の新しい autolayout API を使用して動的レイアウトを構築しようとしています。私が構築しようとしているレイアウトには、下の画像に示すように、間にラベルが付いた 2 つのボタンがあります。
私が望むのは、ラベル内のテキストの量に応じて、灰色で表示されるコンテナー ビューのサイズを増減することです。
これまでのところ、解決できなかった小さな問題が 1 つありますが、説明どおりにレイアウトを正確に機能させることができました。私が抱えている問題は、ラベルの固有の高さが、ラベルの元の幅 (たとえば、インターフェイス ビルダーで設定されたもの) で常に計算され、制約から設定されたラベルの幅ではないことです。
ビューに対する制約は次のとおりです。
- H:|-[左ボタン]-[ラベル]-[右ボタン]-|
- 両方のボタンが垂直方向に中央揃え
- V: |-[ラベル]-|
- ボタンのコンテンツの優先度がラベルよりも高い
- ラベルの圧縮抵抗は、コンテナビューよりも高くなっています
これらの制約がすべて組み合わされて、目的のレイアウトが作成されます。
でも:
- インターフェイス ビルダーのラベルの幅 (インターフェイス ビルダーのリテラル サイズ) が実行時のビューの幅よりも小さい場合、コンテナーの高さが大きすぎます。
これを明確にするために、上記のレイアウトの IB ビューは次のようになりました (はるかに狭いことに注意してください)。
- インターフェイス ビルダーのラベルの幅 (インターフェイス ビルダーのリテラル サイズ) が実行時のビューの幅よりも大きい場合、コンテナーの高さが小さすぎて、テキストの行が途切れます。
発生しているように見えるのは、ラベルの幅に制約はありませんが、ラベルが作成されたときのラベルの元の幅に基づいて、ラベルの高さを計算しているように見えることです (したがって、自動レイアウトはコンテナーの高さを計算します)。ただし、非常に奇妙なのは、テキストの幅と高さが正しいように見えても、ラベル自体のフレームが大きすぎたり小さすぎたりすることです。
これは物事が起こっている順序に関連していると思います.containerViewsのlayoutSubviewメソッドでupdateConstraintsIfNeededを呼び出してみましたが、これは何もしていないようです.
どんな提案でも大歓迎です。