gpt4 book ai didi

ios - UINavigationController 在顶部有额外的状态栏间隙

转载 作者:技术小花猫 更新时间:2023-10-29 10:57:34 25 4
gpt4 key购买 nike

当我设置它时,这看起来很简单,但我无法解释为什么状态栏和导航栏之间存在这个差距。此外,包含的 View 看起来可能已正确对齐,只是向下移动了导航栏。差距看起来像状态栏的大小,所以我认为这与它有关,但我不知道是什么。

Nav Bar with extra space

下面是设置导航 Controller 的代码:

- (void)viewDidLoad
{
[super viewDidLoad];

advancedVC = [[AdvancedSearchFormVC alloc] initWithNibName:@"AdvancedSearchForm" bundle:nil];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:advancedVC];
nav.navigationBar.tintColor = [UIColor defaultNavBarTint];
nav.navigationBar.topItem.title = NSLocalizedString(@"SearchTitle", nil);
UIBarButtonItem *searchButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"SearchButton", nil) style:UIBarButtonItemStylePlain target:self action:@selector(refreshPropertyList:)];
nav.navigationBar.topItem.rightBarButtonItem = searchButton;

self.view = nav.view;
}

rootViewController 使用来自 xib 文件的 View ,我在其中模拟了状态栏、导航栏和选项卡栏。

最佳答案

问题确实是导航 Controller 总是希望为状态栏留出空间,也就是20像素的间隙。在找到这个有效的解决方案之前,我四处搜索了一段时间:

//nav is assumed to be a subclass or instance of UINavigationController
nav.view.frame = CGRectOffset(nav.view.frame, 0.0, -20.0);
//you can then add the navigation's view as a subview to something else

我最初找到了一个对导航栏 View 进行偏移的答案,但它没有用。当您对导航 Controller 的实际 View 执行此操作时,它会起作用。

我使用这种技术将导航 Controller 从另一个 Nib 添加到我的主 Nib 的空 View 中,这样我就可以将它作为 subview 放置在主屏幕中的任何位置。通过在我的主 Nib 上使用一个空 View 作为占位符和定位框架,我创建了一个单独的 Nib 和类来管理导航,它管理用于处理其屏幕的其他 Nib 。通过这种方式,我可以解决经典的“如何在我的导航 Controller 上方添加横幅、图像或自定义 View ”,同时将导航 Controller 作为 subview ......具体来说是在 iOS 5 中。

还值得一提的是,我使用应用程序委托(delegate)来存储和访问所有其他 Controller ,因此它们由我可以从任何类访问的持久实例保留。在所有 Controller 的应用委托(delegate)中创建和合成一些属性,并在 viewDidLoad 中创建实例。这样我以后就可以在任何地方引用我的应用程序中使用的所有 Controller ,方法是添加:

//this shows how to store your navigation controllers in the app delegate
//assumes you've added 2 properties (UINavigationController*)"navController" and (UIViewController*)"rootController" in your app delegate
//...don't forget to add #import "AppDelegate.h" to the top of the file

AppDelegate *app = (AppDelegate*)[[UIApplication sharedApplication] delegate];
[app.navController pushViewController: app.rootController animated:YES];
//now apply the offset trick to remove the status gap
app.navController.view.frame = CGRectOffset(app.navController.view.frame, 0.0, -20.0);

关于ios - UINavigationController 在顶部有额外的状态栏间隙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8873695/

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