在 iOS 13 上隐藏导航栏分隔线

Hide Navigation bar separator line on iOS 13

我有一个带有大标题导航栏的视图控制器。当我按下控制器时,只有 iOS 13 是导航栏下方可见的一条线。我该如何解决?

我已经在 Stack 上尝试了几种解决方案,但它们都没有像这样工作:

let navigationBar = navigationController?.navigationBar
let navigationBarAppearence = UINavigationBarAppearance()
navigationBarAppearence.shadowColor = .clear
navigationBar?.scrollEdgeAppearance = navigationBarAppearence

使用此代码段,即使我将 "clear color" 更改为红色,它也仅在第一个控制器中可见,在推送的控制器中它始终为灰色。

我该如何解决?

编辑

我已经解决了:

if #available(iOS 13.0, *) {
    let appearance = UINavigationBarAppearance()
    appearance.shadowColor = nil
    navigationController?.navigationBar.standardAppearance = appearance
 }

这是我在控制器上使用的导航栏模板,没有线。

navigationController?.setNavigationBarHidden(false, animated: false)
    navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
    navigationController?.navigationBar.shadowImage = UIImage()
    navigationController?.navigationBar.isTranslucent = true
    let titleAttributes =
        [
            NSAttributedString.Key.font: UIFont.systemFont(ofSize: 18),
            NSAttributedString.Key.foregroundColor: UIColor.red,
    ]
    self.navigationController?.navigationBar.titleTextAttributes = titleAttributes

我显然改变了字体大小和颜色,但这是我为每个控制器设置的基本功能,以使其清晰(半透明)。

import UIKit

public protocol HideableHairlineHelper {
    func hideHairline()
    func showHairline()
}

extension HideableHairlineHelper where Self: UIViewController {

    public func hideHairline() {
        self.navigationController?.navigationBar.shadowImage = UIImage()
        self.navigationController?.toolbar.setShadowImage(UIImage(), forToolbarPosition: .any)
    }

    public func showHairline() {
        self.navigationController?.navigationBar.shadowImage = nil
    }
}

我已经尝试了上面建议的方法,但未能删除导航分隔线。最终,我发现使用 TransparentBackground

诀窍是用 TransparentBackground 初始化 UINavigationBarAppearance。然后你就可以轻松去掉导航栏的水平线了。

let appearance = UINavigationBarAppearance()
appearance.configureWithTransparentBackground()
appearance.backgroundColor = UIColor.green // Required background color

然后按照苹果的建议给导航项添加外观修改。

self.navigationItem.standardAppearance = appearance
self.navigationItem.scrollEdgeAppearance = appearance
self.navigationItem.compactAppearance = appearance