【问题标题】:UINavigationBar displays incorrectly when combine with UITabBarControllerUINavigationBar 与 UITabBarController 结合时显示不正确
【发布时间】:2011-11-24 05:17:24
【问题描述】:

我正在尝试使用另一个 UINavigationViewController 和 UIViewController 子类为 UITabBarViewController 创建主屏幕。

在应用中,有:

  • 用于加载 NewsController 和 VideoController 的两个 Tab
  • 应用程序完成启动后立即加载的 HomeViewController。

这是我的应用程序截图。

HomeViewController

NavigationBar 显示一半

NewsViewController

这是我的代码。

//在TabBarWithHomeDelegate.m中

- (BOOL)application:(UIApplication *)application 
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    homeViewController = [[HomeViewController alloc]init];

    UINavigationController *nav = [[UINavigationController alloc]init];

    nav.navigationItem.title = @"Tab 1 Data";
    [nav pushViewController:homeViewController animated:NO]; 


    [self.tabBarController setSelectedViewController:nav];

    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];
    return YES;
}

//在 NewsViewController.m 中用于触摸主页按钮

-(IBAction) homeButtonClick:(id)sender
{
        TabBarWithHomeAppDelegate * appDelegate 
        = [[UIApplication sharedApplication] delegate];

        UITabBarController * tabBarController =  appDelegate.tabBarController;
        [tabBarController setSelectedViewController:nil];
        [tabBarController setSelectedViewController:appDelegate.homeViewController];

}

另外,我附上了源代码。如果您看到并帮助我解决此问题,我将毕业。事实上,我自己尝试了将近 6 个小时。

link to download source code.

【问题讨论】:

    标签: iphone cocoa-touch ios4 uinavigationcontroller uitabbarcontroller


    【解决方案1】:

    您的 HomeViewController 未分配为 UITabBarController 中的选项卡,因此您不应调用:

    [tabBarController setSelectedViewController:appDelegate.homeViewController];
    

    您应该让它成为一个真正的标签或做一些不同的事情。我建议打电话

    [tabBarController presentModalViewController:homeViewController animated:YES];
    

    在这种情况下您将无法看到标签栏,因此您需要一种不同的方式来关闭 homeViewController。但是,这更正确,因为用户看到当前没有选择标签的标签栏控制器并没有什么意义。

    【讨论】:

    • 嗨塞巴斯蒂安塞利斯,非常感谢。不幸的是,将 presentModalViewController 设置为您的建议, HomeViewController 不会显示在屏幕顶部。 :)
    • 应该的。确保您正确调用它并阅读 presentModalViewController 文档。
    • 它现在可以工作了,非常感谢,但是如何控制在 nib 中定义的 HomeViewController 中的视图大小。当它加载到 tabBarController 的 modal 时,它总是填充到全屏大小。我想在屏幕底部显示标签栏。
    【解决方案2】:

    我只是在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 中评论你的代码,一切都很完美:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        self.window.rootViewController = self.tabBarController;
        [self.window makeKeyAndVisible];
        return YES;
    }
    

    【讨论】:

    • 嗨 Nekto,非常感谢。但是,我希望 HomeviewController 的内容显示在屏幕上。它在应用程序启动和触摸主页按钮时显示。
    • 是的,我愿意。 :) 我想我没有说清楚。我需要在 UITabBarContrller 上显示 HomeViewController。启动应用程序后,它会显示主屏幕,其中包含两个加载其他视图控制器的选项卡。
    猜你喜欢
    • 2017-07-17
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    • 2021-10-07
    • 2011-01-07
    相关资源
    最近更新 更多