【问题标题】:Tab Bar disappears below the bottom of the screen标签栏消失在屏幕底部下方
【发布时间】:2011-02-16 03:04:05
【问题描述】:

在我的应用程序中,我使用导航控制器来推送一个加载标签栏控制器和自定义导航栏的视图。问题是标签栏消失在屏幕底部下方,我不知道是什么导致了问题。

如果我在下一个视图中加载一个简单的标签栏,它会正确定位自己……但我需要的是一个标签栏控制器,在这种情况下,标签栏会消失在底部下方。我已经尝试更改标签栏的视图和大小属性,但这并没有解决问题。

我还意识到标签的图像和文本不显示(我已经设置了“收藏夹”和“联系人”的图像和文本,它们足够大并且应该在顶部可见选项卡,但它们不是)。

顺便说一句,两个标签都可以正常工作。

有一个image here

我使用以下代码加载标签栏:

- (void)viewDidLoad {
    [super viewDidLoad];
    myTabBarController = [[UITabBarController alloc] init];
    SettingsViewController* tab1 = [[SettingsViewController alloc] init];   
    AboutViewController* tab2 = [[AboutViewController alloc] init];
    NSArray* controllers = [NSArray arrayWithObjects:tab1, tab2, nil];
    myTabBarController.viewControllers = controllers;
    [self.view insertSubview:myTabBarController.view belowSubview:myNavigationBar];
}

我是否删除导航栏都没有关系。我已经使用它进行了测试:

[self.view addSubview:myTabBarController.view];

...忘记了导航栏,但标签栏仍在底部。

我不知道问题是出在我的一个 NIB 文件中,还是出在我加载视图的方式上(尽管我在 Apple 的 SDK 文档中阅读时这样做了)。有什么想法吗?

另一个问题是...您知道当我选择第二个标签时如何更改导航栏的标题吗?我想我必须在 AboutViewController.m 的 viewDidLoad 中这样做,对吗?

感谢您的宝贵时间!

【问题讨论】:

    标签: iphone uinavigationcontroller uitabbarcontroller tabbar


    【解决方案1】:

    请在每次提交时提出一个问题 - 这将使我们能够更好地帮助您。

    对于您的第一个问题:您需要将标签栏控制器添加到导航控制器,而不是该视图。层次结构应该是:

    • 导航控制器
      • 标签栏控制器
        • 您的观点

    (虽然 Apple 的文档建议标签栏应该是应用程序范围的,因此应该是根视图,而不是导航控制器)。

    对于第二个问题,“返回”按钮上的文本由前一个视图控制器的title 属性确定。要更改它,请执行以下操作 (source):

    - ( void )viewDidLoad
    {
        [ super viewDidLoad ];
    
        UIBarButtonItem *backButton =
        [[ UIBarButtonItem alloc ] initWithTitle:@"Back"
                                           style:UIBarButtonItemStyleBordered
                                          target:nil
                                          action:nil ];
        self.navigationItem.backBarButtonItem = backButton;
        [ backButton release ];
    }
    

    编辑:看来您想在导航堆栈中设置 second 视图控制器的标题。这很简单:

    - ( void )viewDidLoad
    {
        [ super viewDidLoad ];
    
        self.title = @"Title";
    }
    

    【讨论】:

    • 嗨,杰夫,感谢您的回答!我创建了一个这样的结构,因为我有标签栏控制器的视图是从导航控制器的根视图推送的......所以我推送一个视图(导航堆栈中的第二个视图),然后添加标签栏控制器给它。这是不正确的吗?我找不到任何其他方式来推送第二个视图(我有标签栏控制器)。使用该设置一切正常,唯一的问题是标签栏位于屏幕底部下方。
    • 很抱歉同时问了两个问题,以后不会再这样了。无论如何,在我的第二个问题中,当我切换到第二个选项卡时,我想要更改的是导航栏的标题(导航栏不是导航控制器的导航栏,而是我单独创建并叠加在视图(因此更改视图的标题是不够的......我可能不得不更改栏本身的标题,但栏是在前一个视图上声明的)。
    • 对于标签栏:你可以尝试使用它的frame 属性来定位它吗?你应该可以把它放在你喜欢的任何地方。对于导航栏:您必须在某处存储指向它的指针 - 可能在您的第二个视图控制器中定义一个 ivar。这都是非常不标准的东西。我不知道你的最终目标是什么,但你可能会在 View Controller Programming Guide 中找到更多有用的东西:developer.apple.com/iphone/library/featuredarticles/…
    • 再次感谢杰夫。我认为实际上不支持我正在尝试做的事情,我已经解决了加载单个选项卡栏而不是选项卡栏控制器的问题(根据 Apple 的说法,这个不能通过导航控制器内的视图推送)。我在这里解释一下:stackoverflow.com/questions/2781056/view-loading-problem/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多