我正在为两个UIViewController实现UINavigationBar:假设ControllerA和ControllerB。
ControllerA有半透明的UINavigationBar,backgroundColor=.clear属性。
ControllerB具有prefersLargeTitles enabled属性和白色背景。
我应该从ControllerA->ControllerB按下并弹出。这里是我在controllerA生命周期方法中实现的代码:

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版本上遇到的问题:
版本当点击控制器关闭的后退按钮时,动画和标题颜色不正确。这里有视频:https://youtu.be/1g9esUgYDK8
版本==iOS 13
在弹出动画期间,大标题不随解除控制器移动。这里有视频:https://youtu.be/25k3oz2_wcE
怎么解决?提前谢谢你

最佳答案

最后我补充说

if #available(iOS 11.0, *) {
    navigationItem.largeTitleDisplayMode = .always
}

在视图中加载控制器B和
if #available(iOS 11.0, *) {
    navigationItem.largeTitleDisplayMode = .never
}

视图中控件加载
它能像我所期望的那样工作。
注意,您只需要设置一次prefersLargeTitles,最好是在打开应用程序时

07-26 09:37