iOS6のAutoLayoutを使用してこれを行うことができます。6.0より前のiOSで実行する必要があるアプリケーションの場合、自分で実行する必要がありますが、これはそれほど複雑ではありません。
実際、私はこれを行うためのクラスを実装しました(それはずっと前のことですが、それでも機能することを願っていますが、そうしない理由はありません)。このOHStackView
クラスは、UIView
サブビューを水平または垂直に自動的にレイアウトして、それらをスタックまたは整列するサブクラスです。
OHStackView
サブビューを水平または垂直に(上下に重ねるなど)積み重ねたり、上下左右の境界線や中央を揃えたり、各サブビューの間にパディングを指定したりするように依頼できます。サブビューの1つがフレームまたはサイズを変更するたびに、OHStackView
依存するすべてのビューを自動的にリレーアウトして、すべてを再調整します。
(たとえば、2つのUILabelを使用sizeToFit
して、ラベルを呼び出してコンテンツに合わせてサイズを調整するだけで、すべてが自動的に中継されます)
提供されているサンプルプロジェクトがありますので、お気軽にテストしてください。
注:IIRC、私のサブクラスはサブビューの「隠し」プロパティを考慮していません。ただし、実装のループのようif (v.hidden) continue;
に条件を追加して、レイアウトアルゴリズムで非表示でないビューのみを考慮に入れることで、この動作にサポートを簡単に追加できます。for
layoutSubview
HTH