首页 > 解决方案 > 大标题折叠时如何呈现不同的导航标题?

问题描述

目前,我在 ViewController 的 viewdidLoad 中使用以下代码为导航栏启用了大标题:

navigationController?.navigationBar.prefersLargeTitles = true
        self.navigationController?.navigationItem.largeTitleDisplayMode = .automatic

        let date = Date()
        let formatter = DateFormatter()
        formatter.dateFormat = "MMMM dd"
        let result = formatter.string(from: date)




        self.title = “This is a Test\n\(result)"



        var count = 0
        for item in(self.navigationController?.navigationBar.subviews)! {
            for sub in item.subviews{
                if sub is UILabel{
                    if count == 1 {
                        break;
                    }
                    let titleLab :UILabel = sub as! UILabel
                    titleLab.numberOfLines = 0
                    titleLab.text = self.title
                    titleLab.lineBreakMode = .byWordWrapping
                    count = count + 1
                }
            }

        }
        self.navigationController?.navigationBar.layoutSubviews()
        self.navigationController?.navigationBar.layoutIfNeeded()

当导航栏在栏不再大的“正常状态”下折叠时,如何呈现完全不同的标题?

标签: swiftuinavigationbar

解决方案


您可以使用observebounds的检查来更改navigationBar和更改。titleheightnavigationBar

1.对于小标题height= navigationBar 44

2.对于大标题> 44heightnavigationBar

class VC: UIViewController {
    var observer: NSKeyValueObservation?

    override func viewDidLoad() {
        super.viewDidLoad()
        self.observer = self.navigationController?.navigationBar.observe(\.bounds, options: [.new], changeHandler: { (navigationBar, changes) in
            if let height = changes.newValue?.height {
                if height > 44.0 {
                    //Large Title
                    self.title = "Large Title"
                } else {
                    //Small Title
                    self.title = "Small Title"
                }
            }
        })
    }
}

在此处输入图像描述


推荐阅读