当我尝试在启动之间恢复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 方法中,或者通过创建自定义后退栏按钮来更改后栏按钮的标题,但这些方法都没有解决问题。
答案 0 :(得分:1)
我怀疑问题是由于在父视图显示之前推动控制器。我相信你可能会在以下方面取得一些成功,尽管它有点工作。
当您要恢复状态时,请隐藏根视图控制器中的导航栏,并显示启动图像而不是正常内容。
当根视图控制器获取“viewDidAppear”时,然后使用主队列上的调度块,并推送其他控制器,同时配置为隐藏导航栏并显示启动图像。
当您到达要显示的SUPPOSE的视图控制器时,此时显示真实视图并启用显示导航栏。
这是一种压缩方式,可以或多或少地执行系统正在执行的操作,在推送另一个视图之前,始终让父视图至少到达“viewDidAppear”。