【问题标题】:iOS Navigation bar smooth transitioniOS导航栏平滑过渡
【发布时间】:2013-06-26 10:47:32
【问题描述】:

我有一个应用程序,其中第一个屏幕(应用程序的菜单)不需要导航栏,但应用程序的其余部分需要。

我使用的代码工作正常,因为导航栏不在菜单屏幕上,但在应用程序的其他地方存在,但大问题是,一旦您返回菜单,导航栏就会出现大约一瞬间,然后消失。

这不是一个非常顺利的过渡。

如何使过渡更平滑,以便在我返回菜单屏幕时导航栏甚至不会出现一秒钟?

这是我正在使用的代码:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {

    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
        [self.navigationController setNavigationBarHidden:YES animated:NO];
    }
    return self;
}

- (void)viewDidLoad {
    [self.navigationController setNavigationBarHidden:YES animated:NO];
    [super viewDidLoad];
}

-(void) viewDidAppear: (BOOL)animated {
    [[self navigationController] setNavigationBarHidden:YES animated:NO];

    [super viewDidAppear:animated];
}

【问题讨论】:

  • 你能解释一下这与xcode有什么关系吗?
  • Xcode 提供了在“模拟指标”下处理导航栏的选项,这些选项在这里可能有用也可能没有帮助 - 我不想将其视为解决方案的一个可能组件。
  • 这与xcode 无关,xcode 标签保留用于与xcode IDE 本身相关的问题,而不是您在xcode 中遇到的问题。所以xcode IDE 的一个问题是“为什么xcode 没有打开?”和“我如何更新xcode?以及诸如此类的问题。
  • 谢谢。您对@Popeye 的导航栏问题有任何见解吗?

标签: iphone ios ipad uinavigationbar


【解决方案1】:

这样试试,

-(void) viewWillAppear: (BOOL)animated {

    [super viewWillAppear:animated];
    [[self navigationController] setNavigationBarHidden:YES animated:YES];
}

希望对你有帮助...

【讨论】:

  • 以上没有任何区别。我应该提到我在所有 3 个领域都尝试了“动画:是”,但没有运气。谢谢 Erik。
【解决方案2】:

在您的第一个视图控制器中:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [self.navigationController setNavigationBarHidden:YES animated:YES];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [self.navigationController setNavigationBarHidden:NO animated:YES];
}

在您的第二个视图控制器中(不需要,但代码清晰的良好做法):

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [self.navigationController setNavigationBarHidden:NO animated:YES];
}

【讨论】:

    【解决方案3】:

    在视图中设置此项确实在应用的第一个屏幕中消失了

        [[self navigationController] setNavigationBarHidden:NO animated:YES];
    

    而这在 viewdiddisappear 的第二个 VC

     [self.navigationController setNavigationBarHidden:YES animated:NO];
    

    【讨论】:

      【解决方案4】:

      您可以更新导航栏的 Alpha,而不是隐藏和显示导航栏。它将在过渡期间平滑地动画。对于具有透明导航栏的视图控制器,不要修改导航栏,而是在第二个控制器的视图中手动创建导航栏(或只是后退按钮和标题等)。然后,当从第一个视图控制器转换到第二个视图控制器时,我们将隐藏导航栏。

      在第二个控制器的viewWillDisappear 和第一个视图控制器的viewWillAppear: 上,使用self.navigationController.navigationBar.alpha = 0; 将导航栏的alpha 设置为零。由于这是在动画块中,这会使导航栏在推送动画期间消失。

      在第二个控制器的 viewWillAppear 和第一个控制器的 viewWillDisappear 中将 alpha 设置回一个。

      【讨论】:

        猜你喜欢
        • 2016-05-07
        • 2021-12-14
        • 1970-01-01
        • 2018-06-10
        • 1970-01-01
        • 2017-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多