ios - 弹出到非大半透明栏时 UINavigationBar 大标题出现问题
问题描述
我正在为两个 UIViewController 实现 UINavigationBar:假设 ControllerA 和 ControllerB。
ControllerA具有带有 backgroundColor = .clear 属性的半透明 UINavigationBar。
ControllerB具有启用了prefersLargeTitles的属性和白色背景。
我应该从ControllerA -> ControllerB推送和弹出。这是我在控制器生命周期方法中实现的代码:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if #available(iOS 11.0, *) {
navigationItem.largeTitleDisplayMode = .never
}
navigationController?.navigationBar.isTranslucent = true
navigationController?.navigationBar.tintColor = .white
navigationController?.navigationBar.backgroundColor = UIColor.clear
navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
navigationController?.navigationBar.shadowImage = UIImage()
navigationController?.navigationBar.barTintColor = .clear
navigationController?.navigationBar.titleTextAttributes = [
.font: FontFamily.SFProRounded.bold.font(size: 18),
.foregroundColor: UIColor.white
]
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
if #available(iOS 11.0, *) {
navigationController?.navigationBar.prefersLargeTitles = true
navigationItem.largeTitleDisplayMode = .always
navigationController?.navigationBar.largeTitleTextAttributes = [
.font: FontFamily.SFProRounded.bold.font(size: 22),
.foregroundColor: UIColor.black
]
}
navigationController?.navigationBar.titleTextAttributes = [
.font: FontFamily.SFProRounded.bold.font(size: 18),
.foregroundColor: UIColor.black
]
navigationController?.navigationBar.tintColor = .black
navigationController?.navigationBar.backgroundColor = UIColor.white
navigationController?.view.backgroundColor = UIColor.white
navigationController?.navigationBar.barTintColor = .white
}
下面是我在不同 iOS 版本上遇到的问题:
- 版本 < iOS 13
点击返回按钮以关闭控制器时动画和标题颜色不正确。视频在这里: https ://youtu.be/1g9esUgYDK8
- 版本 == iOS 13
在弹出动画期间,大标题不会随着被解散的控制器移动。视频在这里:https ://youtu.be/25k3oz2_wcE
如何解决?先感谢您
解决方案
最后我添加了
if #available(iOS 11.0, *) {
navigationItem.largeTitleDisplayMode = .always
}
在ControllerB的ViewDidLoad和
if #available(iOS 11.0, *) {
navigationItem.largeTitleDisplayMode = .never
}
在ControllerA的ViewDidLoad中 ,它按我的预期工作。
注意只需要设置一次prefersLargeTitles,最好在打开应用程序时设置
推荐阅读
- c# - .NET Core 3.0 使用 Identity + JWT 无法授权
- tensorflow - `tf.data.Dataset.from_generator` 从可修改的缓冲区中检索数据是否是线程安全的?
- amazon-web-services - 我在尝试从我的 Flutter 应用程序访问 AWS EC2 服务器时收到 [SocketException: OS Error: Connection denied, errno = 111]
- keras - 在 Keras 中传递输入时正确处理 Batch 维度
- python - 在我的 df 中确定基于组大小的 ID 的进入和退出时间
- python - CSV 到 Django 中的数据库
- java - Hibernate 查询目标列顺序
- javascript - 有没有办法避免将所有参数传递给函数
- java - JScrollPane 不能与 JPanel 和 JFrame 一起使用
- ios - 如何在 iOS/Swift 中使用 HLS 广播屏幕录制