1

当我尝试在启动之间恢复 UINavigationController 的状态时,我遇到了 UIBarButtonItem/UINavigationBar 的一些奇怪行为。

下面的代码片段显示了我如何恢复导航控制器的状态。此代码片段在viewDidLoad方法中执行。

NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
if ([ud objectForKey:HBStateRestorationQuoteSelection]) {
    NSInteger index = [ud integerForKey:HBStateRestorationQuoteSelection];

    // Fetch Quote
    NSDictionary *quote = [self.quotes objectAtIndex:index];

    // Initialize Quote View Controller
    HBQuoteViewController *vc = [[HBQuoteViewController alloc] initWithNibName:@"HBQuoteViewController" bundle:[NSBundle mainBundle]];
    vc.quote = quote;

    // Push Quote View Controller Onto Navigation Stack
    [self.navigationController pushViewController:vc animated:NO];
}

结果是后退按钮标题由于某种原因被截断。当以正常方式使用导航控制器时,此行为不存在。

请注意,截断不是由于导航栏中标题的大小。如前所述,我不使用此状态恢复逻辑时,后栏按钮的标题显示正常。

我还尝试将恢复代码放在viewWillAppear方法中,或者通过创建自定义后退栏按钮来更改后退栏按钮的标题,但这些方法都没有解决问题。

在此处输入图像描述

4

1 回答 1

1

我怀疑问题是由于在父级显示视图之前推动控制器。我相信您可能会在以下方面取得一些成功,尽管它有点工作。

  • 当您要恢复状态时,然后在根视图控制器中隐藏导航栏,并显示启动图像而不是您的正常内容。

  • 当根视图控制器获得“viewDidAppear”时,然后在主队列上使用调度块,并推送其他控制器,也配置为隐藏导航栏并显示启动图像。

  • 当您到达应该显示的视图控制器时,此时显示真实视图并启用显示导航栏。

这是一种或多或少地做系统正在做的事情的压缩方式,总是让父视图在推送另一个视图之前至少到达“viewDidAppear”。

于 2012-07-22T14:08:02.740 回答