6

そのため、ナビゲーション コントローラー iOS 7 のビュー フレームは、iOS 7 と比較して (私の意見では奇妙なことに) かなり異なって定義されているようです...

例: UIScrollView() を含む UIViewController を想像してください。この UIScrollView( ) は、 とself.scrollViewの全体self.viewをストラットとスプリングで満たし、常に を満たしself.viewます。その UIViewController を UINavigationController に埋め込み、ナビゲーション バーを表示したままにします。

iOS 6 では、次のことを観察します。

  • self.view.frame.origin=(0.0, X)ここでX= ステータス バーの高さ (時間、信号バーなどを含む = 20.0)
  • self.view.frame.size.height= self.view.bounds.size.height= 全高マイナスself.navigationController.navigationBar.frame.size.height
  • self.scrollView.frame.origin= self.scrollView.bounds.origin=(0.0, 0.0)

iOS 7 では、次のことを観察します。

  • self.view.frame.origin = (0.0, 0.0)
  • self.view.frame.size.height= self.view.bounds.size.height= 全体の高さ (つまり、ナビゲーション コントローラーに埋め込まれた場合、高さの減少はありません)
  • self.scrollView.bounds.origin= (0.0, -1 * self.navigationController.navigationBar.frame.size.height)、しかしself.scrollView.frame.origin=(0.0, 0.0)

私の推測では、コンテンツがナビゲーション バーの下に続き、ナビゲーション バーがiOS 7 のようなわずかな量のぼかし + 透明度を表示できるようにするために、これが行われていると思います。

self.scrollView質問: iOS 7 がナビゲーション コントローラーに埋め込まれている場合、iOS 7 でself.scrollView.bounds.originの実際のサイズ (幅 x 高さ) を取得するにはどうすればよいself.scrollView.contentOffsetですか? iOS 6 と iOS 7 で異なるコードを記述し、どちらのバージョンが実行されているかを検出する必要がありますか?

画面が特定のサイズであると仮定して、それをハードコードすることは本当にしたくありません。それは悪い形のように思えるからです...


更新 1:質問しようとしているもののスケッチをアップロードしました。なお、この場合の正解は で416.0、iOS 6 では簡単に入手できますが、iOS 7 では推測に頼らずに入手する方法がわかりません。

スクリーンショット、iOS 6 対 iOS 7 レイアウト

4

2 に答える 2

9

UITableView自動的に調整され、UINavigationBariOS 7 の の背後にコンテンツが表示されるようになっています。これは、 にあるcontentInsetプロパティを変更することによって行われUIScrollViewます。そのため、ナビゲーション/ステータス バーの後ろの部分を除くフレームを取得するには、contentInset.

CGRect frame = self.tableView.frame;
frame.origin.y += self.tableView.contentInset.top
frame.size.height -= self.tableView.contentInset.top;

self.tableView.contentInset.topこのコードは、デフォルトで 0 になるため、iOS 6 でも機能します。

于 2013-11-07T18:21:51.680 に答える