gpt4 book ai didi

iphone - hidesBottomBarWhenPushed = NO 不起作用?

转载 作者:太空狗 更新时间:2023-10-30 03:10:31 27 4
gpt4 key购买 nike

我的应用程序中有一个 UITabBar,我通过将此行放在 AppDelegate< 中隐藏在第一个选项卡中的第一个 UIViewController 上/strong>:

// ... in MyAppDelegate.m
firstViewController.hidesBottomBarWhenPushed = YES;

firstViewController 中,用户可以按下一个 UIButton,从而在同一选项卡中按下一个新的 UIViewController。当发生这种情况时,我希望 UITabBar 再次可见。我试图让它像这样回来:

//... in firstViewController.m

secondViewController = [[SecondViewController alloc] init];
secondViewController.hidesBottomBarWhenPushed = NO;
[[self navigationController] pushViewController:secondViewController animated:YES];

不幸的是,没有带回 UITabBar。它保持隐藏状态。

如何在隐藏 UITabBar 后正确地显示它?

提前致谢。

最佳答案

这个问题困扰了我一段时间,我只是找到了一个有效的解决方案。 hidesBottomBarWhenPushed 属性是一个非常奇怪的野兽,在我看来,它以一种违反直觉的方式工作。

问题在于,当您按下一个新的 View Controller (或弹回)时,navigationController 将询问所有 View Controller (从上到下)是否要隐藏底部栏,如果任何他们说YES,标签栏将被隐藏,这就是为什么标签栏保持隐藏尽管设置NO隐藏在新 View Controller 。

这是我的解决方案 - 在您不希望有标签栏的 View Controller 中覆盖 hidesBottomBarWhenPushed getter,并检查它是否位于堆栈的顶部:

Objective-C

- (BOOL) hidesBottomBarWhenPushed
{
return (self.navigationController.topViewController == self);
}

Swift(不是很明显,因此是片段)

override var hidesBottomBarWhenPushed: Bool {
get {
return navigationController?.topViewController == self
}
set {
super.hidesBottomBarWhenPushed = newValue
}
}

这很好地将隐藏/显示逻辑封装在一个地方,因此您不必在执行隐藏的 View Controller 之外考虑它。

关于iphone - hidesBottomBarWhenPushed = NO 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5641465/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com