
Adobe Air 3.9 + iOS7でステータスバーがコンテンツに被さる問題があって、Adobe Communityでも話題になっています。
iOS7からステータスバーがコンテンツとは別の独立したレイヤとして扱われるようなったためで、これを回避したい場合はアプリ側でiOS7を判定してコンテンツの位置を調整する必要がありそうです。
(SDKの不具合ではないと思っていますが、どうなのでしょう?)
というわけで、iOSのバージョンを取得したかったのですが、それらしきAPIが見つからなかったので、Capabilities.osの値からバージョンを取得する関数を作成してみました。
1 2 3 4 5 6 7 8 9 10 11 12 | function getOSVersion(os:String):Object { var version:Object = {}; if (Capabilities.os.match(os)) { var versionStr:String = Capabilities.os.replace(os, ""); versionStr = versionStr.replace(/^\x20|\x20+.*$/g, ""); var versionArr:Array = versionStr.split("."); if (versionArr[0]) version.major = versionArr[0]; if (versionArr[1]) version.minor = versionArr[1]; if (versionArr[2]) version.patch = versionArr[2]; } return version; } |
getOSVersion()にOS名を渡してあげると、メジャー、マイナー、パッチのそれぞれの番号をプロパティに持つObjectを返却してくれます。iOSの場合は「iPhone OS」がOS名です。
使用例
1 2 3 4 | var version:Object = getOSVersion("iPhone OS"); trace(version.major); // 7 trace(version.minor); // 0 trace(version.patch); // 3 |
先にOS名を知っている必要がある点がいけてませんが、これでiOS7の場合の処理を分岐できそうです。
ちなみに、iOSかどうかを知りたいだけでしたら、Capabilities.manufacturerの値を参照した方が簡単です
1 2 3 4 5 | if (Capabilities.manufacturer.indexOf("iOS") != -1) { // iOS } else { // iOS以外 } |
ところで、Air for iOSでiOS7のステータスバーの高さを取得する方法はどうやるのでしょうか?もともと知りたかったのはこちらなんですよね(笑)