iphone - 隐藏 UIStatusBar/移动 UINavigationBar

标签 iphone ios uinavigationbar uistatusbar

我有一个基于导航的应用程序,用户可以隐藏状态栏。这会被记住在默认设置中。

它大部分工作正常,但有一个异常(exception),如果应用程序加载(从头开始,返回主屏幕后不返回),当状态栏应该可见时,当它切换为不可见时,导航栏不会向上移动以填充屏幕。之后切换设置可以正确地上下移动导航栏,但在导航栏和屏幕顶部或状态栏之间仍然存在额外的状态栏大小的间隙。如果我返回主屏幕并重新进入应用程序,此问题会自行纠正。因此,我假设在返回应用程序时,在 uinavigationcontroller 上调用了一些方法,我需要在切换状态栏后调用这些方法?

我已经尝试了(我认为)wansfullscreenlayout属性的所有组合,我在下面的方法中设置它,但它没有什么区别,所以我最终在 Nib 中将它(在导航 Controller 上)设置为NO。

这是切换状态栏的代码。这是在我的应用程序委托(delegate)中,它根据模板应用程序将导航 Controller 和窗口设置为导出。

if ([UIApplication sharedApplication].statusBarHidden != hideStatusBar)
{
    [[UIApplication sharedApplication] setStatusBarHidden:hideStatusBar withAnimation:UIStatusBarAnimationSlide];
    [UIView animateWithDuration:0.25 animations:^{
        window.frame = [[UIScreen mainScreen] applicationFrame];
    }];
}
else
{
    window.frame = [[UIScreen mainScreen] applicationFrame];
}

感谢您的帮助。

更新

通过 NSLogging 看来,问题出在 UINavigationBar 的框架上。所以我添加了以下代码,它可以工作并具有动画效果,但我不满意!我认为这不是执行此操作的“正确”方法。在大多数情况下,额外的代码不会执行任何操作,因为帧已经位于 (0,0),但在一种不正确的情况下,这会给出正确的结果。

[navigationController.view setNeedsLayout];
CGRect navBarFrame;
UINavigationBar *navBar = nil;
for (UIView *subView in navigationController.view.subviews)
{
    if ([subView isMemberOfClass:[UINavigationBar class]])
    {
        navBar = (UINavigationBar *)subView;
        navBarFrame = navBar.frame;
        navBarFrame.origin = CGPointMake(0,0);
        break;
    }
}

if ([UIApplication sharedApplication].statusBarHidden != hideStatusBar)
{
    [[UIApplication sharedApplication] setStatusBarHidden:hideStatusBar withAnimation:UIStatusBarAnimationSlide];
    [UIView animateWithDuration:0.25 animations:^{
        window.frame = [[UIScreen mainScreen] applicationFrame];
        navBar.frame = navBarFrame;
    }];
}
else
{
    window.frame = [[UIScreen mainScreen] applicationFrame];
}

最佳答案

窗口始终位于状态栏下方,因此您不应尝试调整其大小。

相反,将窗口 Root View Controller 的 View 大小调整为 [[UIScreen mainScreen] applicationFrame] .

关于iphone - 隐藏 UIStatusBar/移动 UINavigationBar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6870489/

相关文章:

iphone - kAudioSessionProperty_InputSources 实际上有什么用?

iphone - 确定 iOS 设备上可能的最大同时触摸数?

ios - 在控制台中记录 NSURLSession 请求

ios - 在 iOS 12 中更改 MFMailComposeViewController 中导航栏的标题颜色不起作用

ios - UINavigationController 和后退按钮标题

iphone - 如何使用 iOS 接收单击并按住远程控制事件?

ios - iTunes connect - 我在哪里可以看到 TestFlight 构建的崩溃报告?

ios - UIImageView 不遵循我应用的约束

ios - UIPickerView 崩溃

ios - 不透明导航栏中的栏按钮未出现 ios