在标签栏控制器/导航控制器上方添加自定义视图

xil*_*il3 13 iphone uitabbarcontroller uinavigationcontroller

我尝试了以下代码,试图让自定义视图显示在标签栏控制器上方(恰好在其所有选项卡中都有一个导航控制器).

问题是它覆盖在导航栏的顶部,我希望导航栏向下移动.

我尝试设置标签栏控制器的框架,但根本没有移动它.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{    
    // Override point for customization after application launch.
    // Add the tab bar controller's current view as a subview of the window
    //self.tabBarController.view.frame = CGRectMake(0, 62, 320, 320);
    self.window.rootViewController = self.tabBarController;

    [self.window makeKeyAndVisible];

    // setting up the header view
    self.headerView = [[HeaderView alloc] initWithFrame:CGRectMake(0, 20, 320, 42)];
    [self.window addSubview:self.headerView];

    // setting up facebook stuff
    AgentSingleton *agentSingleton = [AgentSingleton sharedSingleton];
    agentSingleton.facebook = [[Facebook alloc] initWithAppId:APP_ID];

    return YES;
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Seb*_*ddd 30

将视图添加到tabBarController视图本身:

[self.tabBarController.view addSubview:yourView];
Run Code Online (Sandbox Code Playgroud)


Bor*_*zin 8

您可以简单地将addSubview添加到窗口:

[self.view.window addSubview:myView];
Run Code Online (Sandbox Code Playgroud)


Ano*_*mie 7

没有任何好方法可以做到这一点.UINavigationController和UITabBarController的各个子视图都是私有的,并且试图弄乱它们可能无法正常工作.Apple并没有为我们提供创建"容器"视图控制器的工具,因此您无法轻松地将UINavigationController/UITabBarController嵌入到另一个视图控制器中,或者自己重新创建UINavigationController/UITabBarController.

你最好的选择可能是继续尝试创建自己的"容器"视图控制器,并处理一些不正常的事情.特别是,包含的视图控制器parentViewController将返回nil,因此包含的视图控制器或其子控制器上的各种其他内容将被破坏(例如,interfaceOrientation属性将是错误的,presentModalViewController:animated:可能无法正常工作).其他事情也可能被打破.

或者你可以等到iOS的某个未来版本实际上支持我们创建容器视图控制器(如果有的话),然后只支持该版本.


Jav*_*uez 5

我遇到了同样的问题,最终做了这样的事情:

newView.frame = tabBarController.tabBar.frame
tabBarController.view.addSubview(newView)
Run Code Online (Sandbox Code Playgroud)

将视图添加到 tabBarController 并使用当前选项卡栏的框架作为新视图的位置就可以了。