私はiphoneとipad用のユニバーサルアプリ、2つのストーリーボードを持っていviewDidLoad
ます。ペン先の各要素のすべてのフレームでiphoneシミュレーターでアプリを実行すると、正しいです。しかし、フレーム内のipad(シミュレーター)に対してそれを行うと、nilになりますが、画面は正しく見えます。smthを教えていただけませんか。ありがとう。
2 に答える
これは、iPadで動作しないiossetContentOffsetと非常によく似た質問です...そして私の答えはそこと同じです:
viewDidLoad
「この時点ではビューのジオメトリが設定されておらず、結果が予測できないため、でUIジオメトリ関連のものを初期化しないでください。
...viewWillAppear:
これらのことを行うのに適切な場所です。この時点でジオメトリが設定されているため、ジオメトリ関連のプロパティを取得して設定するのは理にかなっています。」
これは、ジオメトリ関連のプロパティの取得にも当てはまります。ある状況では正しく動作し、別の状況では正しく動作しないことに気を取られないでください...要点は、ジオメトリプロパティの設定/取得が早すぎると、予測できない結果が生じることです。
/の後に結果が表示されているため、画面は正しく表示されます。 viewWillAppear:
viewDidAppear:
アップデート(ios6)
iOS6で自動レイアウトを使用する場合、サブビューがレイアウトされるまでフレームは設定されません。これらの条件下でフレームデータを取得する適切な場所は、viewControllerメソッドviewDidLayoutSubviews
です。
これは後に viewWillAppear:
呼び出されます。ただし、注意してください。常に一緒に呼び出されるとは限りません。たとえば、viewDidLayoutSubviews
は回転後に呼び出されますが、呼び出されviewWillAppear:
ません。viewWillAppear:
ビューが可視ビュー*になるたびに呼び出されますが、viewDidLayoutSubviews
必ずしもそうとは限りません(ビューのリレーアウトが必要な場合のみ)。
(*アプリがバックグラウンドでフォアグラウンドアプリになっている場合を除き、viewWillAppear:
呼び出されません)
どうしてこうなったのかが分かりました。私はオートレイアウトを使用していました。ストーリーボードでチェックを外すと、フレームは正しいです。