在 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
我有一个带有大标题导航栏的视图控制器。当我按下控制器时,只有 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