在透明导航栏和半透明之间过渡

2024-03-22

在苹果最近发布的远程应用程序中,我注意到导航栏的行为方式是独特的,但我无法重现它。弹出“正在播放”视图控制器时,“正在播放”视图控制器的导航栏保持透明,而库视图控制器的导航栏也保持半透明(屏幕截图 1)。我试图弄清楚他们是否使用两个导航控制器或仅使用一个。就我个人而言,我觉得他们只使用其中一个有两个原因(1)启用了交互式弹出手势; (2) 当您按下库视图控制器中的“正在播放”按钮时,就在当前播放屏幕完成“推送视图控制器”动画之前,导航栏变得透明(屏幕截图 2)。这是我在推动视图控制器(将导航栏设置为透明)时遇到的行为。所以我的问题是:Apple 如何呈现两个视图控制器的两个导航栏,就好像它们是单独的一样(如屏幕截图 1 所示),甚至栏按钮、导航标题等...在切换时都是 100% 不透明度(通常在按下/弹出前一个视图控制器的按钮和标题会随着新控制器的按下而消失)。我尝试过使用条形色调颜色viewDidAppear and viewWillAppear在两个视图控制器中,但无法重现相同的行为,并且无法防止栏按钮消失。

天哪,我希望我已经解释得很好了,光是想想我就感到困惑!

Screenshot 1 (Popping): Screenshot 1

Screenshot 2 (Pushing): Screenshot 2


我刚刚下载了该应用程序以确保。使用两个不同的导航栏。您可以通过使用交互式弹出手势来查看这一点。请注意底部视图控制器上的导航栏如何滑入和滑出。在正常的推送和弹出转换期间,导航项只是在现有栏上淡入和淡出,而栏是静止的。这就是当前播放的视图控制器被推送之前所发生的情况。

如果您快速查看,在正在播放的视图控制器动画期间,您可以看到底部导航栏消失。

根据我对 UIKit 行为的经验以及我在应用程序中看到的内容,我认为会发生以下情况:

album_vc= 底部列表视图控制器nowplaying_vc= 顶视图控制器

  • On nowplaying_vc's viewWillAppear:

    • 使用以下命令将导航栏设置为隐藏[self.navigationController setNavigationBarHidden:YES animated:YES];。由于这是在动画块中,这将使导航栏在推送动画期间滑出。
    • Set [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;对此非常确定,因为请注意状态栏样式的转换中没有动画。它只是变成白色。
  • On nowplaying_vc's viewWillDisappear:

    • 将导航栏设置为显示使用[self.navigationController setNavigationBarHidden:NO animated:YES];。由于这是在动画块中,这将使导航栏在弹出动画期间滑入。
    • Set [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;再次注意,在交互式弹出手势期间,状态栏仅发生变化而没有动画。

实现导航栏的透明外观nowplaying_vc,您可以使用空图像([UIImage alloc]) with setBackgroundImage:forBarPosition:barMetrics:.

由于应用程序不旋转,我们无法确定导航栏是否打开nowplaying_vc是另一个导航控制器的一部分,或者只是顶部的导航栏,位置为UIBarPositionTopAttached。据我们所知,那里甚至没有导航栏,只有一个后 V 形图像视图(后栏按钮由图像视图和按钮组成)。

我认为状态栏样式已更改viewWillAppear: and viewWillDisappear:由于交互弹出手势时存在不自然的感觉。我建议使用动画过渡,或者更好的是,使用新的基于视图控制器的状态栏样式,系统会自行对过渡进行动画处理。


现代 API 更新:

您应该使用animateAlongsideTransition:completion: or animateAlongsideTransitionInView:animation:completion:API,而不是依赖于隐式动画viewWillAppear: and viewWillDisappear:.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在透明导航栏和半透明之间过渡 的相关文章

随机推荐

  • 一次播放多个声音?

    我在一个视图上有 6 个声音 然而我想要它 这样我就可以一次播放多个声音 所以你点击声音 1 声音 1 正在播放 然后声音 2 播放 当声音 1 仍在播放时 但此时我按声音1 声音1播放 按声音2 声音2播放 但声音1停止 这是音频部分的代
  • 当我们有 LinkedBlockingQueue 时,为什么还要使用 ConcurrentLinkedQueue?

    我为什么要使用ConcurrentLinkedQueue当我有LinkedBlockingQueue 我知道ConcurrentLinkedQueue是非阻塞的但是LinkedBlockingQueue可以作为ConcurrentLinke
  • 适用于 Windows 的命令行对话框工具

    我需要一个类似于 cdialog 或whiptail 的对话框工具 但可以在 Windows 上运行 我有 MinGW 从源代码编译一些东西是没有问题的 但据我所知 cdialog 和 Whiptail 都包含特定于 UNIX 的代码 因此
  • Spring Boot不加载静态资源

    有很多关于 spring boot 不加载静态资源的问题 并且读完它们 几乎 后我仍然无法解决这个问题 在这个阶段 我选择不使用 Spring Boot 运行 但我仍然想知道问题是什么 我正在使用 Eclipse Java 8 和 Mave
  • 使用 VLC 将文件流式传输为 RTSP

    我需要创建一个可以将 mp3 文件流式传输到另一个设备的服务器 我打算使用 VLC 我查看了 VLC 文档 并对执行此操作的前进方向感到困惑 我找到了这个链接 http www videolan org doc streaming howt
  • T-SQL 到 XML - 每个属性的多个值可以在自己的行中列出吗?

    我目前正在使用 T SQL 将一些数据转换为 XML 我需要在自己的行上列出属性的值 由于某种原因 T SQL 到 XML 不断将值连接在同一行上 示例代码 SELECT Fruits AS Attribute name Apple AS
  • jQuery 中的triggerHandler 与触发器

    出于好奇 jQuery 的目的 用例是什么triggerHandler 据我所知 两者之间唯一 真正 的区别trigger and triggerHandler是本机事件是否触发 以及事件冒泡行为 尽管triggerHandler的冒泡行为
  • RUBY - SSL、基本身份验证和 POST

    我对此感到相当困难 似乎有一些代码片段我似乎无法拼凑在一起 我只是想发布键 值对 但是得到Connection refused connect 2 Errno ECONNREFUSED Help require net http requi
  • Spark Driver 内存计算

    我知道如何计算执行器核心和内存 但是谁能解释一下spark driver memory是根据什么计算的 操作于Dataset比如collect take需要将所有数据移至应用程序的驱动程序进程中 并且在非常大的数据集上执行此操作可能会导致驱
  • MVC 3 授权自定义角色

    我是 MVC 3 新用户 我正在尝试通过 SQL 数据库进行管理 首先 我有客户实体 可以通过管理字段定义管理 该字段是客户实体中的布尔类型 我只想在产品页面中访问管理员 而不是在普通客户中 我想制作 Authorize Roles adm
  • 带字符串的多行内联汇编宏

    我正在尝试实现一个宏 MY MACRO 它存储某个部分中前面带有 32 位整数的字符串 my section 例子 MY MACRO 200 my first string u x 以下是我尝试过的选项以及我面临的问题 我将不胜感激任何帮助
  • 在调试器中跳过表达式主体属性

    有没有类似的 DebuggerStepThrough 属性可用于 C 中的表达式主体属性 例如我想跳过代码 public Byte ByteArray gt Builder CreateArray DebuggerStepThrough 不
  • 如何不在 NextJS 登录页面上渲染布局组件

    如何排除渲染Layout当路由为 login register等等 在 NextJS 中 const MyApp Component pageProps gt return
  • 为什么 javascript 在 if 语句中接受逗号?

    我偶然发现了一些 JavaScript 语法 看起来应该会产生某种解析错误 但实际上却没有 if true true console log splendid else console log horrid splendid if true
  • 隐藏选择的选项组及其内容(所选选项除外)

    我想为国家 地区创建一个选择标签 当我们选择国家 地区时 它会隐藏所有 optgroup 及其国家 地区选择标签的内容 但 optgroup 及其内容与所选国家 地区选项具有相同标签 例如
  • 为什么 std::apply 使用函数模板会失败,但使用具有显式模板参数列表的 lambda 表达式却不会失败?

    在查看 std apply 的引用时参考参数 https en cppreference com w cpp utility apply我们可以看到函数模板不能作为 std apply 的可调用对象传递 让我们考虑以下函数模板 templa
  • 带有 JavaFx 11 和 JDK 11 的 Netbeans 9.0

    我正在尝试在 NetBeans 9 上运行 JavaFX 11 由于 JDK 11 不再具有 JavaFX 我无法让 NetBeans 运行 JavaFX 项目 它说 Failed to automatically set up a Jav
  • 将带有扩展名的文件移动到某个位置

    如何将文件夹中的所有 txt 文件和所有包含的文件夹移动到目标目录中 最好将它们重命名为它们所在的文件夹 尽管这并不那么重要 我对 bash 不太熟悉 要递归移动文件 请组合find with mv find src dir name tx
  • 分布式开发团队 - 所需工具[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一个开发团队分布在全球不同时区 在这样的团队中实现最大生产力的最佳工具是什么 我在寻找 源代码控制
  • 在透明导航栏和半透明之间过渡

    在苹果最近发布的远程应用程序中 我注意到导航栏的行为方式是独特的 但我无法重现它 弹出 正在播放 视图控制器时 正在播放 视图控制器的导航栏保持透明 而库视图控制器的导航栏也保持半透明 屏幕截图 1 我试图弄清楚他们是否使用两个导航控制器或