2

我正在使用自定义选项卡视图控制器(通过 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];

}
4

1 回答 1

1
     self.nav1 = [[UINavigationController alloc] initWithRootViewController:self.tab1vc];
     [nav1.view setFrame:CGRectMake(0, 44, 320, 370)];

在你的“self.tab1vc”初始化方法中,你应该在那个 rootViewController 中设置 frame.origin

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

希望这会帮助你。

于 2012-10-08T04:07:43.847 回答