0

上部と下部のアクセサリ ビュー (ナビゲーション、ページ コントロール) と UIScrollView を含むビューを含む .xib があります。その高さは、iPhone 4 または 5 (3.5 インチまたは 4 インチ) のどちらで実行しているかによって異なります。実行時に、含まれているビューを画面外に移動し、スクロールビューに UIButtons を設定してスクロール可能なランチパッドを作成し、これを画面の下からスクロールします。ボタンをタップすると、別のビューが表示されます。

小さい画面では、スクロールビューに 3 つのボタンのみを表示したいのですが、大きい画面では 4 つ表示します。したがって、実際に表示される前に、スクロールビューが表示されるときの高さを知る必要があります。ビューのライフサイクル (viewWillAppear など) のある時点でこの情報を利用できるようにしたいと考えていましたが、これが正しいと思われる唯一の場所は viewDidAppear です。この時点で、ビューはすでに画面上にあり、ボタンを作成すると、ボタンが突然表示され、画面上でうまくスクロールされません。

.xib の最上位ビューは Retina 4 フルスクリーンに設定されています。

viewWillAppear がボタンを作成する正しい場所であり、ナビゲーション コントローラーがおそらく間違ってビューをインスタンス化していることを認めて喜んでいますが、私の iOS-fu は確実に言えるほど強力ではありません。

私の解決策は、画面サイズを検出し、ボタンの高さを配線することでした。これを行うためのより良い(よりエレガントで、将来性があり、標準的な)方法はありますか?

4

1 に答える 1

0

心配しないでください。あなたは正しい方向に進んでいます。

viewWillAppear は、そのビューとそのサブビューのフレームが完全に計算され、まだ何も描画されていないビューのライフサイクルにおける正しい方法です。ここで、ビューの標準的な動作を修正できます。

viewDidAppear が呼び出されると、viewWillAppear と同じようにビュー要素の位置とサイズに関する情報を取得します。ただし、この時点では、アニメーションとビュー自体は既に描画されています。

つまり、viewWillApear を使用する理由です。

于 2013-06-26T04:27:06.443 に答える