(指摘を受けて編集しています)

現在、UINavigationControllerを使ってiOSの開発を行っています。 ややトリッキーな使い方ではありますが、UINavigationControllerで普通に生成されたビューの中に、 さらに「UINavigationController > UIViewController > UITableView」という構造を持ったものを表示しようとしています。

具体的には、UINavigationControllerで表示されたビューに対し、 UINavigationBar上のボタンを押下された際に以下のように処理しています。

  1. UIViewを継承したカスタムViewを生成(HogePopupView)
  2. UINavigationControllerを生成
  3. (2)に表示するカスタムViewControllerを生成
  4. (3)をrootにinitWithRootViewController:を呼び出す
  5. (1)のviewを、生成元のviewControllerのviewにaddSubviewする

※ storyboardは一切使っていません。

設計の思惑としては、単純にカスタムのUIViewを生成してaddSubviewするだけで使えるようにしたい、というものです。

カスタムviewの目的としては、現在表示されているビューの上にオーバーレイする形で 画面全体からやや小さい、ポップアップのビューを表示したいと考えています。

iOS7, iOS8では特に問題なく表示されているのですが、なぜかiOS6のみ、 上記のUITableViewが20px(おそらくStatus bar分)上にずれる、という現象が発生しています。 ビューが表示されたあと(viewWillAppearなど)に位置を変更する処理を入れてもなぜか変更されません。 (具体的には、UITableViewの引っ張って更新が出てくる上端がUINavigationBarが少し重なっている状態です)

こうして入れ子にした場合に起こる挙動の違いはなにが考えられるでしょうか? (個人的にはUINavigationControllerの挙動として、自動的にステータスバーを考慮した補正がかかるのでは、と思っています)

だいぶ抽象的な質問ですみません。

[追記] 実装上の問題としては解決しました。 (UINavigationBar側を逆に上にずらした) ただ、本質的な改善にはなっていないので、見た目の整合性を取った、という感じです。