9

今日、iPhone を iOS 7 にアップデートし、アプリを再コンパイルしました。.xib ファイルとデバイス上のすべてのビューが上に移動し、上部がナビゲーション バーで非表示になりました。私のviewController設定 self.edgesForExtendedLayout = UIRectEdgeNone;では、iOS 7 ではすべてがうまく見えますが、Deployment Target 6.0 を使用してプロジェクトをコンパイルし、iOS 6 デバイスでテストすると、すべてのビューが再びナビゲーション バーで非表示になります。iOS 7 で一貫して表示するにはどうすればよいですかと iOS 6 を同時に?iOS 6 のサポートを今すぐ中断したくありません。

4

6 に答える 6

13

これを試して:

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) {
    self.edgesForExtendedLayout = UIRectEdgeNone;
}
于 2013-09-19T12:37:53.430 に答える
7

だからここに私がしたことがあります。これはこれまでで最もクリーンなコードではなく、スクロール ビューで奇妙な結果が得られないようにする必要があります。

基本的に、すべてのサブビューをナビゲーションバーの高さ (45) だけ下に移動します。私のアプリでは常に画面の下部に移動するスクロールビュー/テーブルビューの場合、高さを 45 減らして、まだ最後に到達できるようにします。これは一部のアプリの解決策ですが、すべてのスクロールとテーブルビューがこのように縮小されることを意図していることを確認する必要があります。

再帰的ではないため、スクロールビューのテーブルビューなどについて心配する必要はありません。

- (void)viewDidLoad
{
    [super viewDidLoad];

    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) {

        self.edgesForExtendedLayout = UIRectEdgeNone;

    } else {
        [self moveAllSubviewsDown];
    }

}

- (void) moveAllSubviewsDown{
    float barHeight = 45.0;
    for (UIView *view in self.view.subviews) {

        if ([view isKindOfClass:[UIScrollView class]]) {
            view.frame = CGRectMake(view.frame.origin.x, view.frame.origin.y + barHeight, view.frame.size.width, view.frame.size.height - barHeight);
        } else {
            view.frame = CGRectMake(view.frame.origin.x, view.frame.origin.y + barHeight, view.frame.size.width, view.frame.size.height);
        }
    }
}
于 2013-09-19T20:00:42.683 に答える
2

Autolayout を使用して Interface Builder でストーリーボードを使用している場合は、「トップ レイアウト ガイド」を使用してビューの上部に制約を追加できます。

于 2013-09-26T01:55:17.133 に答える
1

次の値をアプリの plist に追加します: "コントローラーベースのステータス バーの外観を表示" し、"NO" に設定します。

于 2013-09-19T23:50:18.767 に答える