我正在使用自定义选项卡视图控制器(通过 UITabBarDelegate 实现)和其中的导航控制器作为子视图。为了让 Navigation Controller 的 Navigation Bar 出现在父 Tab View Controller 中 Navigation Bar 的下方,我通过创建一个从屏幕顶部开始 44 像素的 CGRect 以编程方式初始化 NavigationController。
这可以很好地减去一个小但非常明显的错误。在我的父选项卡视图控制器首次显示后的一瞬间,NavigationController 的导航栏从它应该在的位置下方大约 30 像素开始,在它跳回正确的 44 像素高度之前留下一些讨厌的空白(这正是父标签栏控制器的导航栏结束)。下面的之前/之后的屏幕截图说明了我在说什么。
我应该在哪里移动 NavigationController 的子视图的初始化和/或视图插入,以隐藏最终用户对导航栏所做的这一点调整?
目前我有这样的导航控制器的初始化发生在标签栏控制器的 init 方法中,如下所示:
- (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;
}
然后我继续在主选项卡栏控制器的“ViewDidLoad”方法中插入 NavigationController 的实际视图,如下所示:
- (void)viewDidLoad
{
[super viewDidLoad];
[self.view insertSubview:nav1.view belowSubview:mainTabBar];
[mainTabBar setSelectedItem:driverListTabBarItem];
}