最初に statusBar が既に非表示になっているかどうかを を介してチェックし、非[[UIApplication sharedApplication] isStatusBarHidden]
表示でない (== 表示されている) 場合は非表示にします! そうでなければ、そうでなければ!
ステータスが表示されているときに 20px を修正するには - ナビゲーションが適切に押されていない場合は、 of に 20 ポイントを追加するだけorigin.y
ですself.navgigationController.navigationBar.frame
。
ステータスバーを非表示にしたい場合も同じことを行い、その 20 ポイントを削除してそのままorigin.y
にself.navgigationController.navigationBar.frame
しておきます0
。
私もあなたと同じ問題に遭遇しました。これが私のサンプルコードです。好きなように構成できます。
@implementation SomeViewController {
BOOL isStatusBarEnabled;
}
// ...
- (void)toggleStatusBar
{
UINavigationBar *navBar = self.navigationController.navigationBar;
if ([[UIApplication sharedApplication] isStatusBarHidden]) {
// Change to regular mode
// Show status bar
[[UIApplication sharedApplication] setStatusBarHidden:NO
withAnimation:UIStatusBarAnimationSlide];
[UIView animateWithDuration:0.3
animations:^{
navBar.frame = CGRectMake(navBar.frame.origin.x, 20, navBar.frame.size.width, navBar.frame.size.height);
} completion:nil];
} else if (![[UIApplication sharedApplication] isStatusBarHidden]) {
// Change to fullscreen mode
// Hide status bar
[[UIApplication sharedApplication] setStatusBarHidden:YES
withAnimation:UIStatusBarAnimationSlide];
[UIView animateWithDuration:0.4
animations:^{
navBar.frame = CGRectMake(navBar.frame.origin.x, 0, navBar.frame.size.width, navBar.frame.size.height);
} completion:nil];
}
}
// ...
...そして、私の場合、ユーザーがステータスバーの表示/非表示の切り替えを選択できるようにする設定キーがあります。
// ...
- (void)onDefaultsChanged:(NSNotification*)aNotification
{
NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
isStatusBarEnabled = [standardDefaults boolForKey:kStatusBar];
if (isStatusBarEnabled) {
if ([[UIApplication sharedApplication] isStatusBarHidden]) {
// Change to regular mode
// Show status bar
[self toggleStatusBar];
} else {
// Change to fullscreen mode
// Hide status bar
[self toggleStatusBar];
}
// ...
}
それでおしまい!