Ios 生命周期:何时在UIViewController中隐藏和显示选项卡栏

Ios 生命周期:何时在UIViewController中隐藏和显示选项卡栏,ios,objective-c,uiviewcontroller,lifecycle,Ios,Objective C,Uiviewcontroller,Lifecycle,要隐藏我的选项卡栏,我需要 - (void)viewDidLoad { [super viewDidLoad]; self.tabBarController.tabBar.hidden=YES; } 很明显,为了让它再次出现,我需要做的就是打电话 self.tabBarController.tabBar.hidden=NO; 但我应该在哪个生命周期方法中进行此调用?对于在最新的iOS/Xcode中哪些生命周期方法仍然有效,似乎存在分歧。另外,作为一个声音工程的问题,我想知道一

要隐藏我的选项卡栏,我需要

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.tabBarController.tabBar.hidden=YES;
}
很明显,为了让它再次出现,我需要做的就是打电话

self.tabBarController.tabBar.hidden=NO;

但我应该在哪个生命周期方法中进行此调用?对于在最新的iOS/Xcode中哪些生命周期方法仍然有效,似乎存在分歧。另外,作为一个声音工程的问题,我想知道一个非常正确的答案:
ViewDidEnglish
ViewDidUnload
ViewDidDispose

来回答您在apple doc上的问题

iOS 6.0中不推荐使用viewDidUnload[…]。视图不再被清除 在内存不足的情况下,因此永远不会调用此方法

因此,iOS 6.0中不推荐使用
viewDidUnload
,最好放置
self.tabBarController.tabBar.hidden=NO
viewdiddemouse
中,但当视图从屏幕中删除而不是从内存中删除时,它可以调用
viewdiddemouse
。因此,如果视图再次出现,它将不会调用
viewDidLoad
,因此在这种情况下,
tabbar
将保持未隐藏状态,并且要解决这一问题,您需要做两件事。 Put
self.tabBarController.tabBar.hidden=YESview中的code>将出现
,而不是
viewWillLoad

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    self.tabBarController.tabBar.hidden=YES;
}
并将未隐藏的tabbar调用放到
viewdiddemouse

- (void)viewWillDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];
    self.tabBarController.tabBar.hidden=NO;
}

它将管理所有情况,其他地方不安全,无法拨打此电话。您应始终使用
viewWill/didebeen
viewDid/willdefine
以及
viewWillLoad
,在某些情况下,它们是安全的,并且在没有不确定的情况(崩溃等)时始终呼叫.

你想要达到什么目的还不是很清楚,但这取决于你想什么时候把它隐藏起来。另外,要取消隐藏它,应该使用
self.tabBarController.tabBar.hidden=NO(注意
NO
而不是
YES


如果我猜到您想要达到的效果,我会告诉您在
视图中实现它将消失
视图消失

根据您想要达到的效果,有一个更优雅的解决方案适用于许多用例:

情节提要:

转到要推送的视图控制器

选中“按下时隐藏底部栏”

以编程方式:

在推送的viewController中:

override var hidesBottomBarWhenPushed: Bool {
    get {
        return true
    }
    set {
        super.hidesBottomBarWhenPushed = newValue
    }
}

我必须再次显示选项卡的原因是,一旦一个ViewController调用self.tabBarController.tabBar.hidden=YES,视图将永远隐藏。因此,我没有遍历每个视图控制器来显示它,而是让控制器负责隐藏它,以便在它离开屏幕时将其显示出来。ViewDidEvale没有修复它。酒吧永远都不存在了。(我刚刚复制并粘贴了您的代码)