如何在navigationBar上使用普通和大型标题的不同风格?

问题描述 投票:0回答:3

我在导航栏中使用大标题。我还称它有这样的阴影。

https://i.ibb.co/WckRgVb/file-3.jpg

现在我想隐藏阴影,但只在大标题上,当我向下滚动(正常大小)时,阴影应该出现。

这是代码,我现在正在使用:

extension UINavigationController {

    // Shado Style for Nav Bar
    func shadowStyle(largeTitle: Bool = false) {
        navigationBar.shadowImage = UIImage()
        navigationBar.layer.masksToBounds = false
        navigationBar.layer.shadowColor = UIColor(red:0.80, green:0.80, blue:0.80, alpha:1.0).cgColor
        navigationBar.layer.shadowOpacity = 0.7
        navigationBar.layer.shadowOffset = CGSize(width: 0, height: 2.0)
        navigationBar.layer.shadowRadius = 5

        if(largeTitle) {
            if #available(iOS 11.0, *) {
                navigationItem.largeTitleDisplayMode = .always
                navigationBar.prefersLargeTitles = true
            }
        } else {
            if #available(iOS 11.0, *) {
                navigationItem.largeTitleDisplayMode = .never
                navigationBar.prefersLargeTitles = false
            }
        }
    }
}

我在ViewController中将其称为:

override func viewWillAppear(_ animated: Bool) {
    self.navigationController?.shadowStyle(largeTitle: true)

    // other code
}

我的问题是,只有在显示大标题时,如何删除阴影?

swift
3个回答
3
投票

要在单个条上执行此操作,只需直接设置即可。

无论何时你想要,要更改所有条形,使用AppDelegate的外观代理在UINavigationBar中设置它,以便在加载第一个条形图之前启动它。

这里有一个例子,标题文字为蓝点的格鲁吉亚Bold 18点:

 let attrs = [
        NSAttributedString.Key.foregroundColor: UIColor.blue,
        NSAttributedString.Key.font: UIFont(name: "Georgia-Bold", size: 18)!
    ]

    UINavigationBar.appearance().titleTextAttributes = attrs

0
投票

检查这个布尔:self.navigationController?.navigationBar.prefersLargeTitles

override func viewWillAppear(_ animated: Bool) {
   if self.navigationController?.navigationBar.prefersLargeTitles {
        self.navigationController?.shadowStyle(largeTitle: true)
   }

   // other code

}

0
投票

现在我发现了自己。

我只需要根据导航栏的高度设置navigationBar.layer.shadowOpacitynavigationBar.frame.size.height

© www.soinside.com 2019 - 2024. All rights reserved.