Ios 导航控制器子视图中的导航栏初始化到错误位置(即使它自己修复)

Ios 导航控制器子视图中的导航栏初始化到错误位置(即使它自己修复),ios,uinavigationcontroller,initialization,uinavigationbar,render,Ios,Uinavigationcontroller,Initialization,Uinavigationbar,Render,我使用自定义选项卡视图控制器(通过UITabBarDelegate实现)和其中的导航控制器作为子视图。为了使导航控制器的导航栏显示在父选项卡视图控制器的导航栏下方,我通过创建一个从屏幕顶部开始44像素的CGRect,以编程方式初始化NavigationController 除了一个很小但非常明显的bug之外,它工作得很好。在第一次显示“我的父选项卡视图”控制器后的一瞬间,NavigationController的导航栏从它应该位于的位置下方大约30个像素开始,在返回到44个像素的正确高度(这正是

我使用自定义选项卡视图控制器(通过UITabBarDelegate实现)和其中的导航控制器作为子视图。为了使导航控制器的导航栏显示在父选项卡视图控制器的导航栏下方,我通过创建一个从屏幕顶部开始44像素的CGRect,以编程方式初始化NavigationController

除了一个很小但非常明显的bug之外,它工作得很好。在第一次显示“我的父选项卡视图”控制器后的一瞬间,NavigationController的导航栏从它应该位于的位置下方大约30个像素开始,在返回到44个像素的正确高度(这正是父选项卡栏控制器导航栏的结束位置)之前留下一些令人讨厌的空白。下面的前/后截图说明了我所说的内容

我应该将NavigationController子视图的初始化和/或视图插入移动到何处,以隐藏导航栏对最终用户所做的调整

目前,我已经在选项卡栏控制器的init方法中初始化了NavigationController,如下所示:

- (id)initWithCoder:(NSCoder *)aDecoder{
    self = [super initWithCoder:aDecoder];
    if (self) {
        self.tab1vc =[[ContactsListViewController alloc] initWithNibName:@"ContactsViewController" bundle:nil];
        self.nav1 = [[UINavigationController alloc] initWithRootViewController:self.tab1vc];
        [nav1.view setFrame:CGRectMake(0, 44, 320, 370)];
        }
    }
    return self;
}
- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.view insertSubview:nav1.view belowSubview:mainTabBar];
    [mainTabBar setSelectedItem:driverListTabBarItem];

}
然后我继续在主选项卡栏控制器的“ViewDidLoad”方法中插入NavigationController的实际视图,如下所示:

- (id)initWithCoder:(NSCoder *)aDecoder{
    self = [super initWithCoder:aDecoder];
    if (self) {
        self.tab1vc =[[ContactsListViewController alloc] initWithNibName:@"ContactsViewController" bundle:nil];
        self.nav1 = [[UINavigationController alloc] initWithRootViewController:self.tab1vc];
        [nav1.view setFrame:CGRectMake(0, 44, 320, 370)];
        }
    }
    return self;
}
- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.view insertSubview:nav1.view belowSubview:mainTabBar];
    [mainTabBar setSelectedItem:driverListTabBarItem];

}
在“self.tab1vc”init方法中,应该在该rootViewController中设置frame.origin

    self.view.frame = CGRectMake(0.0f,0.0f,320,460);

希望这对您有所帮助。

您解决了这个问题吗?我面临着和你一样的问题。1,首先显示视图和导航视图之间的黑色空间。