2

タイトルの内容: 空の UIView サブクラスを作成し、それにサブビューを追加します。空の layoutSubviews メソッドを作成し、そこにブレークポイントを追加します。次に、プロジェクトをビルドすると、layoutSubviews メソッドのその時点でビューをロードすると、シミュレーションが停止します。これまでのところ、すべて問題ありません。シミュレーションを続行し、デバイスを回転させます (View Controller が任意の方向を許可するように設定されていると仮定します) が、オブジェクトがどのように回転しているかを確認できるにもかかわらず、layoutSubviews が再度呼び出されることはありません。何か案が?

OK、質問を簡単にします: いくつかのサブビューを持つカスタム UIView を作成し、デバイスの向きに反応させるにはどうすればよいですか? drawRect などを使用する必要はありません。UIView をサブクラス化し、いくつかのサブビューを追加して、デバイスが回転しているときにそれらを処理するだけです。

4

2 に答える 2

6

UIView で autoresizingMask を設定しようとしましたか? たとえば、次のようにします。

someView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

UIViewのドキュメントから:

「ビューの境界が変更されると、そのビューは各サブビューの自動サイズ変更マスクに従ってサブビューのサイズを自動的に変更します」

autoresizingMask を None 以外に設定するlayoutSubviewsと、ビューの境界が変更されたときにメソッドが常に呼び出されることを意味するはずです。

于 2013-02-21T15:37:31.587 に答える
3

まったく同じかどうかはわかりませんが、同様の問題に遭遇しました。UISplitViewContoller (Xcode のテンプレート) を使用し、サブビューを DetailViewController に追加していました。ViewController のメイン UIView のサブビューであったため、layoutSubviews メソッドは回転時に呼び出されませんでした。だから私はこれを DetailsViewController に追加して動作させました (detailView は私のサブビューです):

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
    [super didRotateFromInterfaceOrientation:fromInterfaceOrientation];
    if (detailView != nil) [detailView layoutSubviews];
}
于 2011-05-25T20:04:13.133 に答える