2013.09.20 · 技術と道具

PhoneGap + jQuery Mobile + iOS SDK7で起きるステータスバー問題に対応する

PhoneGap + jQuery MobileでiOSアプリを作るというのは、それをどれだけ本気でやるかという違いはあるとしても、それなりに行われているのではないかと思います。
当社(アルティザンエッジ合同会社)においては、それがいま、メインの仕事となっていて、それを始めて9か月になったりします。

昨日、iOS7が正式リリースとなりました。私のiPhoneにも導入し、それと合わせてMacのXcodeの方もXcode5としてiOS SDK7を入れました。

その環境で、既存(PhoneGap 2.5 + jQuery Mobile 1.3.0ベース。ちょっと古いですね)のアプリをコンパイルしてみると・・・。

あれ?ステータスバーをアプリのナビゲーションバーが隠してしまっている。

iOS SDK6でコンパイルしたアプリをiOS7で動作させても、このような現象にはならないので、これはiOS SDK7 + iOS7特有の現象なわけですが、それというのは、iOS7からOS側で出しているステータスバーと、アプリ側で出しているナビゲーションバーが一体化したからなのですね。(例えば、iOS7でEvernoteの最新版アプリを動かしたりすると、ステータスバーが緑色になってナビゲーションバーと一体化したりします。)

PhoneGapはまだiOS7に正式対応していないこともあって、この辺の制御が上手く出来ないのではないかと思います(ちなみに、最新版であるPhoneGap 3.0を使っても同様の現象になりました。)。もしくは、jQUery Mobile側なのかなぁ・・・。

で、当面の解決策としては以下のようなコードをPhoneGap自体に入れてしまうことです。

修正するのは、ConrdovaLib.xcodeproj内にある、Classes/Cleaver/CDVViewController.mです。

OBJECTIVEC
- (void)createGapView
{
  CGRect webViewBounds = self.view.bounds;

  webViewBounds.origin = self.view.bounds.origin;

  //ここから追記
  NSString *currentSystemVersion = [[UIDevice currentDevice] systemVersion];
  if ([currentSystemVersion floatValue] >= 7.0f) {
    webViewBounds.origin.y += 20;
    webViewBounds.size.height -= 20;
  }
(後略)

単純にステータスバーの分のoriginを下にやって、高さを狭めるだけです。
iOS6以前に問題が出ないように、バージョン判定を入れておきます。

すると・・・

見事。ステータスバーが隠れないように、ナビゲーションバーが下に降りました。

ステータスバーとナビゲーションバーの一体化というiOS7の特徴を無視するような解決策なので、あくまで暫定案かなとは思いますが、簡単に対応できるので、まずはこれで切り抜けられるのではないかと思います。

2013/09/20 08:18
← この4か月くらい何をしていたのか
iOS7で可能になったAppのバックグラウンド更新を調べた →
井上 研一
経済産業省推進資格ITコーディネータとして中小企業のDX・AI活用の現場で伴走支援を行う。「ITCプロセスガイドライン4.0」および「中小企業向けAI活用ガイド」執筆メンバー。著書・講演多数。ITエンジニアとして25年以上の実務経験。AI導入の実務に10年以上携わる。自ら開発したAIサービス「Gen2Go」が北九州発!新商品創出事業の認定を受ける。2026年4月より北九州市立大学大学院マネジメント研究科の学生としての顔も持つ。

本サイトおよびブログに掲載している内容は、特に明記のない限り、井上研一個人の見解に基づくものです。所属・関与する組織、団体、企業、研究会等の公式見解を示すものではありません。