gpt4 book ai didi

ios - 如何从半透明平滑过渡到不透明的 UINavigationBar iOS?

转载 作者:IT王子 更新时间:2023-10-29 07:51:40 25 4
gpt4 key购买 nike

在 View 之间转换时,我在 iOS 7 和 8 上重新配置 UINavigationBar 时遇到问题。

我的应用程序当前包含以下 UIViewController 流程:

VC1 --> VC2 --> VC3

在这个流程中

  • VC1 是主屏幕,有一个不透明 UINavigationBar
  • VC2 有一个半透明 UINavigationBar
  • VC3 回到具有不透明 UINavigationBar

我遇到的问题是这些 View 之间的转换看起来都非常草率。首先,我尝试了以下操作:

在 VC2 中

- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];

// configure appearance
[self.navigationController.navigationBar configureTranslucentAppearance];
}

在 VC1 和 VC3 中

- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];

// configure appearance
[self.navigationController.navigationBar restoreDefaultAppearance];
}

下面是上面列出的两个辅助函数的实现:

- (void)restoreDefaultAppearance {
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

[self setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor JTTextNavBar]}];
[self setTintColor:[UIColor JTTextNavBar]];
[self setBarTintColor:[UIColor JTBackgroundNavBarWithAlpha:1.0]];
[self setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
[self setBackgroundColor:[UIColor JTBackgroundNavBarWithAlpha:1.0]];
[self setShadowImage:[UIImage navigationBarShadowImage]];
[self setTranslucent:NO];
}

- (void)configureTranslucentAppearance {
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

[self setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
[self setBackgroundColor:[UIColor clearColor]];
[self setShadowImage:[UIImage new]];
[self setTranslucent:YES];
}

这是处理这种转换的最基本方法。它具有以下视觉人工制品:

  • 从 VC1 --> VC2 开始转换时,导航栏会变黑。动画正常完成enter image description here
  • 当从 VC2 --> VC1 转到时,导航栏会在 segue 有时间完成之前立即更改为应用程序默认颜色。 enter image description here
  • 当从 VC2 --> VC3 转到时,导航栏立即从半透明变为应用程序导航栏颜色,然后菜单项和 VC 主体动画。enter image description here
  • 从 VC3 --> VC2 开始时,导航栏会立即变黑并保持这种状态,直到转场完成。 enter image description here

这些转换看起来一点都不好。理想情况下,我希望 View 与其新的 UINavigationBar 一起顺利过渡,但我看到成功执行此操作的唯一方法是手动向每个 xib 添加工具栏。

有什么建议吗?如果此描述令人困惑,我们深表歉意:(

编辑:为每个列出的转换添加了 UINavigationBarUIViewController 顶部的裁剪图像。

最佳答案

我终于找到了一个像样的解决方案!

似乎没有一种正确的方法可以从不透明的 UINavigationBar 平滑过渡到透明的 UINavigationBar 但是您可以从具有可见状态栏的 View Controller 平滑过渡到具有隐藏状态的 View Controller 栏。

这打开了一个可能的解决方法,即在上面的 VC2viewWillAppear 中添加以下内容:

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

一旦你有了它,手动添加一个 UINavigationBar 到你的 xib 并将其配置为透明的(并添加所有必要的 UIBarButtonItem 和 View )。

如果一切都正确连接,从 VC1VC2 将以与 View 转换相同的速度隐藏 UINavigationBar 并且 VC2 将显示其嵌入的 UINavigationBar

注意:要使其正常工作,您必须确保在可从 VC2viewWillAppear 中> 您通过以下方式将 UINavigationBar 重置为可见(如有必要):

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

TL;DR - 手动将 UINavigationBar 添加到透明导航栏 View Controller ,并在其 viewWillAppear 中通过 隐藏默认值>setNavigationBarHidden:动画:

关于ios - 如何从半透明平滑过渡到不透明的 UINavigationBar iOS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29307370/

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