6

メインビューが回転したら、サブビューを再配置したいので、ViewControllerでオーバーライドします

willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration

そこにサブビューのフレームを設定します。これはすべてうまくいっていますが、サブビューでもオーバーライドしました

 layoutSubviews

そのため、正しくレイアウトされます。しかし、問題は、これが2回呼び出されることです。おそらく1回はwillAnimateRotationToInterfaceOrientationでフレームを設定したとき、もう1回は回転が原因です。(フレームを設定しないと、一度呼び出されます。)

確かに、これは設計上の欠陥のように見えるようにフレームをレイアウトするのはViewControllerの責任です-layoutSubviewsが1回だけ呼び出されるようにするための解決策は何ですか?

4

1 に答える 1

19

同じ質問がありました。このページは私にとって役立つと思いました。これはあなたにとって役に立ちますか?

編集:これがページの要約です(コピーされました):

  • initによってlayoutSubviewsが呼び出されることはありません(duh)
  • addSubviewにより、追加されるビュー、追加されるビュー(ターゲットビュー)、およびターゲットビューのすべてのサブビューでlayoutSubviewsが呼び出されます。
  • setFrameは、フレームのサイズパラメータが異なる場合にのみ、フレームが設定されているビューでlayoutSubviewsをインテリジェントに呼び出します。
  • UIScrollViewをスクロールすると、layoutSubviewsがscrollViewで呼び出され、そのスーパービューになります
  • デバイスを回転させると、親ビュー(応答するviewControllersプライマリビュー)でlayoutSubviewのみが呼び出されます。
  • removeFromSuperview – layoutSubviewsはスーパービューでのみ呼び出されます(テーブルには表示されません)
于 2013-03-10T17:43:28.287 に答える