2011-07-25 59 views
7

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

问题是它重叠在导航栏的顶部,我想导航栏向下移动。

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

- (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; 
} 

任何想法?

回答

7

没有什么好的方法可以做到这一点。 UINavigationController和UITabBarController的各种子视图都是私有的,试图混淆它们可能无法正常工作。 Apple并没有给我们提供创建“容器”视图控制器的工具,所以你不能轻易地将UINavigationController/UITabBarController嵌入到另一个视图控制器中,或者自己重新创建UINavigationController/UITabBarController。

你最好打赌可能会继续尝试创建你自己的“容器”视图控制器,并处理一些不正确的事情。尤其是,包含的视图控制器的parentViewController将返回零,因此包含的视图控制器或其子控制器上的各种其他事物将被破坏(例如interfaceOrientation属性将错误,presentModalViewController:animated:可能无法正确工作)。其他的事情也可能被打破。

或者您可以等到iOS的某些未来版本实际上支持我们创建容器视图控制器(如果曾经),然后仅支持该版本。

0

你的意思是上面的垂直高于其他内容?

或以上,因为坐在其他内容的顶部?

有presentModalViewController:动画:但我怀疑这就是你想要的?

+0

垂直高于其余内容。 – xil3

+0

我把它放在顶部,但目前它覆盖了导航控制器。我需要按下标签栏控制器...... – xil3

+0

使用一个modalViewController,其上的背景视图是当前视图控制器上的最顶层视图(类似于view.superview.superview.superview,直到它为零) – dwbrito

7

你可以简单addSubview到窗口:

[self.view.window addSubview:myView]; 
+0

对我来说,自我.view.window为null,因此添加子视图不起作用。 – Lewis42

+0

@ Lewis42并不是说这是正确的方法,而是在viewDidLoad方法窗口属性内部始终为零。这需要在viewDidAppear方法内完成。 –

0

我不能评论,所以我会在这里写这篇文章的其他人谁碰到这个页面出现。被投票的Borut的答案实际上是更容易和更正确的答案。

他根本没有提供给你正确的方向。您需要将自定义视图添加到您的AppDelegate中声明的应用程序的窗口中(在Mono中,这将是AppDelegate.Window.Add(myView),而不是,该视图的窗口为null(例如this.View .Window)。

这个工作在Xamarin /单声道不错,我不明白为什么它不会对对象 - 同在正确的代码。

20

添加视图到tabBarController视图本身:

[self.tabBarController.view addSubview:yourView]; 
0

你可以做这样的事情:

if let indeedTabBarController = self.tabBarController { 

    let buttonHeight: CGFloat = 49 // height of tab bar 
    let buttonWidth = UIScreen.main.bounds.width/3 // in case if you have 3 tabs 
    let frame = CGRect(x: 0, y: UIScreen.main.bounds.height - buttonHeight, width: buttonWidth, height: buttonHeight) 
    let button = UIButton(frame: frame) 
    button.addTarget(self, action: #selector(self.someAction), for: .touchUpInside) 

    indeedTabBarController.view.addSubview(button) 
} 
相关问题