首页 文章

恢复状态导航控制器后截断后退按钮 Headers

提问于
浏览
0

当我尝试在启动之间恢复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];
}

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

请注意,截断不是由于导航栏中 Headers 的大小 . 正如我之前提到的,当我不使用这种状态恢复逻辑时,后栏按钮的 Headers 显示正常 .

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

enter image description here

1 回答

  • 1

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

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

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

    • 当你到达要显示SUPPOSE的视图控制器时,此时显示真实视图并启用显示导航栏 .

    这是一种压缩方式,可以或多或少地执行系统正在执行的操作,在推送另一个视图之前始终让父视图至少到达“viewDidAppear” .

相关问题