我正在使用pushViewController在我的应用程序中推送视图。按下后退按钮的工作时间约为95%,就像您期望的那样。但是,如果我尽可能快地进出视图,我会遇到顶部条移动的情况,就像弹出一样,但视图说。在这种状态下,我留下了一个后退按钮,(在正常操作中我已将此按钮的文本更改为“取消”#39;)。按下后会再次为顶栏设置动画,然后我在顶栏中没有任何按钮,我被困在视图内。
你知道这里会发生什么吗?以下是一些更多细节:
子视图调用这些一次或两次:
[[UIApplication sharedApplication] beginIgnoringInteractionEvents];
[[UIApplication sharedApplication] endIgnoringInteractionEvents];
子视图也在扩展BaseViewController。在这个基本控制器内部,所有的视图方法都被重载(它们只是调用超级)。可能有趣的是:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self customizeNavigationBar];
}
- (void)customizeNavigationBar
{
[self.navigationController.navigationBar setTintColor:UIColorFromRGB(kNavigationBackgroundColor)];
UIBarButtonItem *backButton_ = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"ID_BUTTON_BACK", @"") style:UIBarButtonItemStyleBordered target:self action:nil];
self.navigationItem.backBarButtonItem = backButton_;
[backButton_ release];
}
如果您需要更多代码或我能更好地解释问题,请告诉我。
---编辑---- 我也会在视图中调用Google Analytics。我记得这会在我的应用中引起其他问题:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
NSError *error;
if (![[GANTracker sharedTracker] trackPageview:@"/app_new_page"
withError:&error]) { }
}
此代码放在我的实际视图中(不是BaseViewController)。
答案 0 :(得分:1)
我发现了问题。问题是我正在调用setNavigationBarHidden:NO with with animated:NO在viewDidLoad中显示没有动画的导航栏,但使用带有动画的pushViewContoller:YES。
-----最初-----
[self.navigationController pushViewController:controller animated:YES];
和
- (void)viewDidLoad
{
[super viewDidLoad];
[self.navigationController setNavigationBarHidden:NO animated:NO];
}
解决方案是从viewDidLoad中删除setNavigationBarHidden并将其移动到viewWillAppear中,并以与动画视图相同的方式为其设置动画。由于我的导航栏立即出现,因此可以在视图控制器完成动画(推入堆栈)之前按下,导致所有这些问题。
-----解决方案-----
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:NO animated:animated];
}
感谢您的帮助!