gpt4 book ai didi

iphone - 当状态栏隐藏时,如何让 UINavigationController 中的导航栏更新其位置?

转载 作者:行者123 更新时间:2023-12-03 18:21:29 24 4
gpt4 key购买 nike

我有一个带有可见导航栏的UINavigationController。我有一个特定的 UIViewController ,我想在将其插入导航堆栈时隐藏状态栏。一旦弹出这个 viewController,我想再次显示状态栏。

我将栏隐藏在 UIViewControllerviewWillAppear 方法中,如下所示:

- (void) viewWillAppear:(BOOL)animated {

[super viewWillAppear:animated];

[self.navigationController setWantsFullScreenLayout:YES];
[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
}

请注意,为了清楚起见,我在此处设置了 setWantsFullScreenLayout:YES,但实际上我只是在 Interface Builder 中设置此属性。

问题:NavigationController 的导航栏不会向上移动以占据现在隐藏的状态栏的空间。

一个黑客解决方案我发现唯一可以刷新导航栏位置的方法就是隐藏它并再次显示它,如下所示:

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
[self.navigationController setNavigationBarHidden:YES animated:NO];
[self.navigationController setNavigationBarHidden:NO animated:NO];

但这显然是一种黑客行为,必须有更好的方法。

我尝试过的其他事情:

  1. 我尝试在隐藏状态栏后(即在我的方法末尾)调用[super viewWillAppear]

  2. 我在 navigationController.view 上尝试了 setNeedsLayout,如下所示:

    [[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];    
    [self.navigationController.view setNeedsLayout];

但这似乎不起作用。

任何帮助表示赞赏。谢谢

最佳答案

有两种方法可以满足您的要求。

一种是手动移动导航栏:

在 View 中将出现:

    [UIApplication sharedApplication].statusBarHidden = YES;
self.view.frame = [UIScreen mainScreen].applicationFrame;
CGRect frame = self.navigationController.navigationBar.frame;
frame.origin.y = 0;
self.navigationController.navigationBar.frame = frame;

在 View 中将消失:

    [UIApplication sharedApplication].statusBarHidden = NO;
CGRect frame = self.navigationController.navigationBar.frame;
frame.origin.y = 20.0;
self.navigationController.navigationBar.frame = frame;

如果您也愿意关闭导航栏,事情也会好起来的,尽管我怀疑这不是您想要的:

    [UIApplication sharedApplication].statusBarHidden = YES;
self.navigationController.navigationBarHidden = YES;

关于iphone - 当状态栏隐藏时,如何让 UINavigationController 中的导航栏更新其位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2393868/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com