IOS 7でアプリをテストしようとすると、ステータスバーにビューが表示されます...読んだように、iOS 7ではステータスバーが非表示になっています。では、iOS 6とiOS 7の両方で実行できるように互換性を持たせるにはどうすればよいですか?画面ごとにiOSバージョンごとに異なる.xibファイルを作成する必要がありますか?
私はこれを読んでいます:標準アプリの両方のバージョンが同様のレイアウトを持つ必要がある場合、自動レイアウトを使用して、iOSの両方のバージョンで正しく動作するUIを作成します。 iOSの複数のバージョンをサポートするには、ストーリーボードまたはXIBファイルのビューとコントロールを調整するために自動レイアウトが使用できる単一の制約セットを指定します(制約の詳細については、「ビュー間の制約エクスプレスリレーションシップ」を参照してください)。
標準アプリの両方のバージョンが同様のレイアウトを持つ必要があり、自動レイアウトを使用していない場合は、オフセットを使用します。オフセットを使用するには、まずiOS 7のUIを更新します。次に、以前のUIの各要素の原点、高さ、幅を、iOS 7 UIの要素の新しい位置からのオフセットとして定義する値を指定します。
しかし、.xibで自動レイアウトを使用すると、自動レイアウトがiOS 6より前のバージョンにあるというエラーが表示されます。
この問題を修正するにはどうすればよいですか?
iOS 7は、一部のビューではステータスバーを非表示にし、他のビューでは非表示にしないようです。すべてのビューで非表示にするには、次を実行します。
Hide during application launch
がまだチェックされていることを確認してください。View controller-based status bar appearance
を追加し、NO
に設定します。おそらく、各View Controllerに次のコードを追加する必要があります。
- (void)viewDidLoad
{
[super viewDidLoad];
if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)])
{
[self prefersStatusBarHidden];
[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
}
else
{
// iOS 6
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
}
}
// Add this method
- (BOOL)prefersStatusBarHidden {
return YES;
}
同じ問題があります。今のところ、2つのハックを行い、どちらに進むかを決定します。
UIStatusBarHidden
およびUIViewControllerBasedStatusBarAppearance
をtrueに設定すると、ステータスバーを完全に非表示にできます。ステータスバー領域の自動レイアウトアカウントを作成するにはどうすればよいですか?
さて、私はそれを理解しました。
サブビュー(私の場合はBRSMyListSubViewController
)、viewDidLoad
で、これら2つのいずれかを設定する必要があります
self.edgesForExtendedLayout = UIRectEdgeNone;
self.automaticallyAdjustsScrollViewInsets = NO;
OR
self.edgesForExtendedLayout = UIRectEdgeNone;
self.extendedLayoutIncludesOpaqueBars = YES;
興味深いことに、ルートView Controllerでは、これらの値はそれぞれデフォルトのUIRectEdgeAll
、NO
、およびYES
に設定されていますが、tableView
はnavbarおよびフッター。
なぜそんなに非論理的であるのか分かりません。
edgesForExtendedLayout
がふるまいの原因であることは明らかですが、他の2つのプロパティのいずれかと混合する必要があることも奇妙です。
IOS 7で Xcode 5を使用してステータスバーを表示する場合は、ボタンと他のサブビューを再配置して、ステータスバーの周囲に十分なスペースを確保します。しかし、待ってください! iOS 6もサポートしたい。それ、どうやったら出来るの?
Appleのドキュメント を見つけ、ドキュメントに「Supporting Two Versions of a Standard App」というタイトルを見つけました。
XIBファイル を編集している場合は、それを選択してアシスタントエディターをクリックします。そこに「マニュアル、自動...」メニューがあります。次に、「プレビュー」を選択します。
次に、ビューレイアウトが並んでいます。次に、右ペイン(ビュー)の右下にポップアップボタンがあることに気付くでしょう。 「iOS 7以降」と表示されます。 「iOS 6.1以前」を選択できます。わあ! iOS 7のレイアウトに影響を与えることなく、iOS 6.1の調整を行えるようになりました。
ストーリーボードで作業している場合、基本的に同じです。 View Controllerオブジェクトを選択し、アシスタントエディタモードをクリックして、「プレビュー」、「iOS7以降」の順に選択します... Bluh Bluh Bluh。
よくわかりませんが、アシスタントエディターのみがiOS 7 +/iOS 6-モードに切り替えることができます。つい最近発見したので、誤解やその他のトリックがある場合は指摘してください。
マルチxibを構築する必要はありません。あなたの問題は「20px」だと思います:同じXIBファイルはiOS 6で見栄えが良いのですが、iOS 7では20ピクセルを見逃しています。
たとえば、ビューがあり、Y = 0です。iOS6では、ステータスバーの下部にあります。 iOS 7では、ステータスバーの上に表示されます。
Xcode 5を使用してXIBファイルを開き、アシスタントエディターを有効にする必要があります。次の手順を実行します:
ファイルインスペクターを選択し、「表示形式」を「iOS 7以降」に切り替えます
サイズインスペクターを選択し、deltaYに「-20」を入力します
終わった!
IOS 7.0以降およびiOS 6.0以下のメインUIViewサイズを確認する必要があるのは一度だけです。
IOS 7からAppleはメインビューサイズを変更しました=修正済みです。ナビゲーションバー、タブバーを追加した場合、ビューサイズは同じままです[iPhone 4s:320 * 480、iPhone 5:320 * 568]。