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

4

我有一个带有大标题的导航栏的视图控制器。在推送此控制器时,只有在iOS 13上会在导航栏下方出现一条线。如何解决这个问题?

我已经尝试过Stack上的几个解决方案,但它们都没有起作用,比如:

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

使用这个代码片段,即使我将“清除颜色”更改为红色,在第一个控制器中它也只能显示为红色,但在推入的控制器中它始终是灰色。

我该如何解决呢?

编辑

我已经解决了:

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

3

我尝试了上面建议的方法,但无法去除导航分隔线。最终,我发现使用 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

3
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
    }
}

这不是我采用的解决方案,但我认为它是一个不错的解决方案。 - LorenzoS

0

这是我在控制器上使用的 NavBar 模板,没有任何行。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接