2

プログラムでUIViewを追加するiPad用のアプリを構築しています。ビューが読み込まれると、他の UIView を問題なく追加できます。ただし、UI がロードされた後、プログラムで UIView を作成してコーナーなどに追加しようとすると、他の UIView がシフトし、ビューが再描画されません (したがって、他の UIView とウィジェットの古い位置/サイズはも描かれています)。

この問題を回避するために何をすべきかについてのアイデアはありますか?

編集:問題を引き起こしているパネルのサイズを変更するコードは、ボタンが押されたときに呼び出される関数にあります。関数の要点は次のとおりです。

CGRect fooPanelFrame = CGRectMake(fBasePanelWidth,
                                  50,
                                  fBasePanelWidth,
                                  panelHeight);

[_fooPanelView setFrame:fooPanelFrame];

「fooPanelView」は UIView 型です。これは、すべてが構築された後にサイズ変更される唯一のものです。他の UIView は、「viewDidLayoutSubViews」メソッドで (同様の方法で) サイズ変更されます。

編集:これはUIが以前のように見えるものです:

フレームリサイズ前

中央のフレームのサイズを変更すると、次のようになります。

フレームのリサイズ後

青色はルート UIView の色です。

もう 1 つの注意点は、サイズ変更の前に、変更しているビューのサイズをログに記録すると、値は期待どおりであり、後ではないということです。私のテストでは、意図的にすべて 20 に設定していますが、戻ってくるフレームの値はそうではありません。これは、スーパービューに変更が必要な設定があることを意味するのだろうか...

4

1 に答える 1

0

だから、これは私の愚かな愚かさが原因のようです。ボタンを押したときに viewDidLayoutSubviews(...) メソッドが再度呼び出されることに気付きませんでした (サイズ変更は、ボタン イベント ハンドラーが呼び出す関数で行われます)。UIView のサイズが変更される状況のデザイン パターンはありますか? 今のところ、ビューが描画されていてサイズを変更しているだけの場合は、viewDidLayoutSubviews(...) メソッドを終了します。

于 2013-07-09T18:13:51.310 に答える