【问题标题】:How to compensate for hidden status bar in modal view over tabbed nav view如何通过选项卡式导航视图补偿模态视图中的隐藏状态栏
【发布时间】:2013-03-23 17:21:06
【问题描述】:
我有一个有 4 个视图的 UiTabbar 控制器。我还添加了一个按钮(添加到标签栏)。这提供了一个模态视图控制器。在我的模态视图控制器的 viewDidAppear 方法中,我有以下代码
[self setWantsFullScreenLayout:YES];
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:YES];
由于某种原因,第一次加载时,视图向下移动了 20 像素。如果我关闭视图控制器,然后再次显示它,则视图处于所需位置。我应该将此代码放在哪里,以便视图始终位于正确的位置。
【问题讨论】:
标签:
uitabbarcontroller
modalviewcontroller
uistatusbar
【解决方案1】:
首先我们通过[[UIApplication sharedApplication] isStatusBarHidden]检查statusBar是否已经隐藏,如果没有隐藏(==被显示),我们隐藏它!否则,请不要这样做!
我也遇到了同样的问题,下面是我的示例代码,你可以随意配置:
@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];
}
// ...
}
就是这样!