调用 pushViewController 时,后退按钮会覆盖上一个 UIBarButton

Posted

技术标签:

【中文标题】调用 pushViewController 时,后退按钮会覆盖上一个 UIBarButton【英文标题】:Back button covers up a previous UIBarButton when pushViewController is called 【发布时间】:2014-07-17 21:45:59 【问题描述】:

我的应用通过左侧的滑出菜单进行导航。在每个viewController 的顶部是一个名为“导航”的左侧UIBarButton,当触摸它时,无需执行拖动效果即可打开滑出菜单。我在我的应用程序中实现语音命令,如果用户说“转到财务”,它会转到标题为 FianceViewControllerviewControllerinstantiateViewControllerpushViewController

这一切都很好,唯一的问题是与push segue相关的后退按钮覆盖了UINavigationBar左侧插槽中的“导航”按钮。使用self.navigationItem.hidesBackButton = YES; 隐藏后退按钮和我的“导航”按钮。无论如何,当推送发生时不会出现后退按钮,但仍然允许查看和使用我之前创建的“导航”栏按钮?或者如果这个UIBarButton 的困境无法解决,除了push 之外,我还能做什么?

说出来的代码部分:

if ([title isEqualToString:@"FINANCES"])


    FinanceViewController *fvc = [[self storyboard] instantiateViewControllerWithIdentifier:@"finance"];
    [[self navigationController] pushViewController:fvc animated:YES];


【问题讨论】:

【参考方案1】:

如何添加导航按钮? 我会在隐藏后退按钮后尝试添加它,如下所示:

self.navigationItem.hidesBackButton = YES;
UIButton *navigationButton = [[UIButton alloc] initWithFrame:CGRectMake(15.0, 15.0, 100.0, 32.0)];
self.navigationController.navigationBar.backItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:navigationButton];

【讨论】:

我已经添加了创建导航按钮的代码。这很棘手,因为这是在 rootViewController 而不是个人 viewControllers 中声明的,所以让我知道你的想法。【参考方案2】:

我没有隐藏我的后退按钮,而是发现我可以简单地在它上面写!在pushViewController 之前使用fvc.navigationItem.leftBarButtonItem = self.navigationItem.leftBarButtonItem;,允许“导航”按钮覆盖后退按钮。

【讨论】:

以上是关于调用 pushViewController 时,后退按钮会覆盖上一个 UIBarButton的主要内容,如果未能解决你的问题,请参考以下文章

调用 pushViewController 时,后退按钮会覆盖上一个 UIBarButton

pushViewController 在不同场景中调用时会导致不同的行为

在 Swift 中的 presentViewController 之后调用 pushViewController

PushViewController 和 UIView 动画无效

pushViewController调用的UIViewController的出现动画显示两次

pushviewcontroller 动画而不实际调用 pushviewcontroller