18

iOS 6 で開発されたアプリがあります。しかし、現在 iOS 7 または iOS 6 用にコンパイルされたアプリでも、iOS 7 デバイスで実行すると、上部のナビゲーション バー (iOS 7 の新しい巨大なバー) のコンテンツが非表示になります。上部のナビゲーション バーがそれを覆います。CGRect を使用して手動で下に移動すると、iOS 7 では見栄えがよくなりますが、iOS 6 では見栄えが悪くなります (その上に大きなスペースがあるため)。

自動レイアウトは物事を正しくセットアップするのが難しいため、アプリは自動レイアウトをオフにしてビルドされました。

私の質問は、iOS 7 のみのコンテンツを下に移動する簡単な方法はありますか? 自動レイアウトをオンにして、すべての UI 要素を元の位置に戻すのに 1 か月も費やす必要はありません。このアプリは、30 以上の画面と画面上の多くのアニメーション ビューを備えた非常に洗練されたものです。

4

4 に答える 4

30

iOS 7 が 1 年以上前にリリースされたとしても、このレイアウトの問題にはまだ少し誤解が残っていると思います。それで、私は最終的に私の答えをさらに詳しく説明することにしました。

つまりね。

automaticallyAdjustsScrollViewInsets' デフォルト値はであるためYES、非常に簡単な解決策は次のコードを追加することです。

if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)]) { // if iOS 7
    self.edgesForExtendedLayout = UIRectEdgeNone; //layout adjustements
}

ViewController の-viewDidLoadメソッドに。

ステータス バーのクイクを削除したい場合 (バーの半透明性のため、まったく変ではありません) を追加しself.navigationController.navigationBar.translucent = NOます。デフォルト値は ですYES: これはコンテンツとは関係ありません。透過性のためにコンテンツに関連していますが、それはまったく別の話です。

extendedLayoutIncludesOpaqueBarsNOデフォルトなので、self.navigationController.navigationBar.translucent = NO基本的に持っていることを意味します

self.edgesForExtendedLayout = UIRectEdgeLeft | UIRectEdgeRight| UIRectEdgeBottom; 

または、より一般的には、そのようなものです(アイデアを与えるための疑似コードのようなものです...)

BOOL enableTopEdge =  extendedLayoutIncludesOpaqueBars && !navigationBarIsTranslucent
self.edgesForExtendedLayout = (enableTopEdge & UIRectEdgeTop) | UIRectEdgeLeft | UIRectEdgeRight | UIRectEdgeBottom; 
于 2013-09-29T21:34:18.203 に答える
1

put self.edgesForExtendedLayout = UIRectEdgeNone;

ViewDidLoad メソッドで

于 2016-04-12T18:40:59.967 に答える