阻止UINavigationBar popViewController动画

3
我有以下问题:我已经覆盖了UINavigationControllerpopViewControllerAnimated:(BOOL)animated,因为我想要一个自定义动画。代码如下:
- (UIViewController *)popViewControllerAnimated:(BOOL)animated 
{
    UIViewController *poppedCtrl = [super popViewControllerAnimated:NO];
    [((customViewController *) self.topViewController) doCustomAnimation];
    return poppedCtrl;
}

不幸的是,UINavigationBar似乎忽略了我明确禁用内置动画,但它仍然是有动画效果的。

我需要做什么来防止导航栏的动画效果?

2个回答

11

经过一些阅读和实验,我终于找到了如何实现所需行为的方法。

要防止导航栏动画化,仅覆盖(UIViewController *)popViewControllerAnimated:(BOOL)animated是不够的。

还需要创建自定义导航栏并覆盖(UINavigationItem *)popNavigationItemAnimated:(BOOL)animated

- (UINavigationItem *)popNavigationItemAnimated:(BOOL)animated {
    return [super popNavigationItemAnimated:NO];
}
当然,这个自定义导航栏也必须是被使用的那一个(我只是在界面构建器中替换了我的导航控制器中使用的导航栏)。

3
为什么这种行为在 pushNavigationItem: ... 中不起作用呢?请问原因是什么? - horseshoe7
干得好!我注意到在iOS 7中,返回按钮仍然会淡出 - 你有没有想过如何立即过渡? - N V

1
如果有人想要禁用推送动画 - 这个方法适用于我,通过重写UINavigationBar上的此方法:
- (void)pushNavigationItem:(UINavigationItem *)item {
    NSMutableArray* items = [[self items] mutableCopy];
    [items addObject:item];
    self.items = items;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接