web-dev-qa-db-ja.com

iOS 7 UINavigationBar-UIViewレイアウトの問題

レイアウトに問題があります。

IOS6での表示は次のとおりです。

enter image description here

IOS7での外観は次のとおりです。

enter image description here

でも、大丈夫です。 AppleのiOS7 TransitionGuide で説明したように、- (void)viewDidLoadにもう1つストロークを書きました

        self.edgesForExtendedLayout = UIRectEdgeNone;

そして、それは今このように見えます:

enter image description here

助言がありますか?レイアウトの何が問題になっていますか?青一色のUINavigationBarが必要です。そして、なぜこれの上部が透明であるのか分かりません。何かアイデアがありますが、なぜそれがそれほど奇妙に見えるのですか?どうすれば修正できますか?

23
skywinder

navigationBar.translucent = NO;をお試しください

デフォルトではYESです。

UINavigationBarドキュメントから:

IOS 7での新しい動作。デフォルトはYESです。プロパティをNOに設定することで、不透明な背景を強制できます。ナビゲーションバーにカスタム背景画像がある場合、デフォルトは画像のアルファ値から推測されます。アルファ<1.0のピクセルがある場合はYES、不透明なカスタム背景画像があるバーにsetTranslucent:YESを送信すると、適用されます画像に対するシステム不透明度が1.0未満。半透明のカスタム背景画像のあるバーにsetTranslucent:NOを送信すると、バーのbarTintColorを使用して画像の不透明な背景が提供され、UIBarStyleBlackの場合は黒、barTintColorがnilの場合はUIBarStyleDefaultの場合は白になります。

31
Tarek Hallak

この行を 'view will appear'メソッドに追加します(存在しない場合は、次のように入力して追加します:

- (void)viewWillAppear:(BOOL)animated
{

    [super viewWillAppear:animate];

}

次に、viewWillAppearの下部の[self viewWillAppear:]行の下に、次のコードを追加します。

if([self respondsToSelector:@selector(edgesForExtendedLayout)])
    [self setEdgesForExtendedLayout:UIRectEdgeBottom];

これにより、上部のバー(ナビゲーションバー)が不透明になります。 iOS 7では、Nov Barが不透明に設定されているかどうかに応じてObj-Cの反応が異なります。これは、iOS 6と7の両方で機能することを保証するための良い方法です(次のようにいくつかの問題があります:

navigationBar.translucent = NO;

これが役に立てば幸いです。アプリをiOS 7に変換したときに同じ問題が発生し、解決策を見つけるまでに時間がかかりました。

8
Jack Solomon

IOS7では、UINavigationBarのスタイルはデフォルトで半透明なので、コンテンツを下に隠し、コンテンツを表示します。

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    if([self respondsToSelector:@selector(edgesForExtendedLayout)])
        [self setEdgesForExtendedLayout:UIRectEdgeBottom];
}
4