web-dev-qa-db-ja.com

iOS 7でステータスバーを非表示にすると、ナビゲーションバーが上に移動します

ステータスバーを非表示にしようとしていますが、ナビゲーションバーの高さを「大きく」維持しています。今、- (BOOL)prefersStatusBarHiddenYESに設定してステータスバーを非表示にすると、[self setNeedsStatusBarAppearanceUpdate];。これに伴う問題は、ナビゲーションバーが上にスライドし、表示しようとしている通知用のスペースを残さないことです。ステータスバーの上にビューを追加するだけではオプションではありません。ステータスバー/ナビゲーションには派手なぼかし効果があります。標準のナビゲーションバーの高さをステータスバーの高さで維持し、そこからステータスバーを削除する方法を知っている人はいますか?

編集;私がやったことは、リスクを冒して、プライベートAPIを介してステータスバーのUIWindowを取得し、それを相殺することです。

編集2;アプリはプライベートAPIで承認されました。ただし、注意してください。

33
Tim Wachter

フレームを次のように使用してカスタムUIViewを作成できます。

customView.frame=CGRectMake(0, 20, self.view.frame.size.width, self.view.frame.size.height);

また、以下の手順に従ってステータスバーを非表示にします

info.plistに移動し、存在しない場合は2つの属性を追加します。「ステータスバーは最初は非表示です」をYESに設定し、UIViewControllerBasedStatusBarAppearanceNOに設定します。アプリのステータスバーを非表示にします。

3
Rahul Mathur

ビューコントローラに次のコードを追加します。

if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)])
{
    self.edgesForExtendedLayout = UIRectEdgeNone;
}
2
Tushar

私はこれを一度しなければなりませんでした。最終的に独自のカスタムナビゲーションバーを作成し、フレームを次のように設定しました。

navBar.frame=CGRectMake(0, 20, self.view.frame.size.width, self.view.frame.size.height);

それは当時私のために働いた。試してみてください。

1
Geet
1
iPatel

ここでの別の回避策:サブクラスUINavigationControllerオーバーライドメソッド:

- (void)viewWillLayoutSubviews
{
    [super viewWillLayoutSubviews];
    if (self.navigationBar.frameMinY < 1) {
        self.navigationBar.frameHeight = 64;
    } else {
        self.navigationBar.frameHeight = 44;
    }
}

set frameMinYが設定されているframe.Origin.yおよびsetframeHeightはsetframe.size.height

0
dopcn