ステータスバーを非表示にしようとしていますが、ナビゲーションバーの高さを「大きく」維持しています。今、- (BOOL)prefersStatusBarHidden
をYES
に設定してステータスバーを非表示にすると、[self setNeedsStatusBarAppearanceUpdate];
。これに伴う問題は、ナビゲーションバーが上にスライドし、表示しようとしている通知用のスペースを残さないことです。ステータスバーの上にビューを追加するだけではオプションではありません。ステータスバー/ナビゲーションには派手なぼかし効果があります。標準のナビゲーションバーの高さをステータスバーの高さで維持し、そこからステータスバーを削除する方法を知っている人はいますか?
編集;私がやったことは、リスクを冒して、プライベートAPIを介してステータスバーのUIWindowを取得し、それを相殺することです。
編集2;アプリはプライベートAPIで承認されました。ただし、注意してください。
フレームを次のように使用してカスタムUIViewを作成できます。
customView.frame=CGRectMake(0, 20, self.view.frame.size.width, self.view.frame.size.height);
また、以下の手順に従ってステータスバーを非表示にします
info.plistに移動し、存在しない場合は2つの属性を追加します。「ステータスバーは最初は非表示です」をYES
に設定し、UIViewControllerBasedStatusBarAppearance
をNO
に設定します。アプリのステータスバーを非表示にします。
ビューコントローラに次のコードを追加します。
if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)])
{
self.edgesForExtendedLayout = UIRectEdgeNone;
}
私はこれを一度しなければなりませんでした。最終的に独自のカスタムナビゲーションバーを作成し、フレームを次のように設定しました。
navBar.frame=CGRectMake(0, 20, self.view.frame.size.width, self.view.frame.size.height);
それは当時私のために働いた。試してみてください。
positionForBar:
の方法UIBarPositioningDelegate Protocol.
別の回答やコピー/過去を入れたくないので、次の質問/回答をよく見てください。 :)
iOS 7ステータスバーがNavigationBarと衝突します
iOS 7 UIToolBarがステータスバーでオーバーライド
iOS7のコンテンツと重複するステータスバー
ここでの別の回避策:サブクラス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