gpt4 book ai didi

ios - 如何隐藏 UINavigationBar 1px 底线

转载 作者:IT老高 更新时间:2023-10-28 12:12:33 25 4
gpt4 key购买 nike

我有一个应用有时需要其导航栏才能与内容融为一体。

有谁知道如何摆脱这个烦人的小酒吧或改变它的颜色?

在下图的情况下,我说的是“ Root View Controller ”下方的 1px 高度线

enter image description here

最佳答案

对于 iOS 13:

使用 .shadowColor属性

If this property is nil or contains the clear color, the bar displays no shadow

例如:

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

适用于 iOS 12 及以下版本:

为此,您应该设置自定义阴影图像。但是要显示阴影图像,您还需要设置自定义背景图像,引用 Apple 的文档:

For a custom shadow image to be shown, a custom background image mustalso be set with the setBackgroundImage(_:for:) method. If the defaultbackground image is used, then the default shadow image will be usedregardless of the value of this property.

所以:

let navigationBar = navigationController!.navigationBar
navigationBar.setBackgroundImage(#imageLiteral(resourceName: "BarBackground"),
for: .default)
navigationBar.shadowImage = UIImage()

以上是隐藏它的唯一“官方”方式。不幸的是,它消除了条形图的半透明性。

我不想要背景图片,只想要颜色##

你有这些选择:

  1. 纯色,无半透明:

     navigationBar.barTintColor = UIColor.redColor()
    navigationBar.isTranslucent = false
    navigationBar.setBackgroundImage(UIImage(), for: .default)
    navigationBar.shadowImage = UIImage()
  2. 创建填充颜色的小背景图像并使用它。

  3. 使用下面描述的“hacky”方法。它还将保持条形半透明。

如何保持条形半透明?##

要保持半透明,您需要另一种方法,它看起来像一个 hack,但效果很好。我们试图移除的阴影是 UINavigationBar 下某处的细线 UIImageView。我们可以找到它并在需要时隐藏/显示它。

以下说明假设您只需要在 UINavigationController 层次结构的一个 Controller 中隐藏细线。

  1. 声明实例变量:

    private var shadowImageView: UIImageView?
  2. 找到这个阴影(细线)的添加方法UIImageView:

    private func findShadowImage(under view: UIView) -> UIImageView? {
    if view is UIImageView && view.bounds.size.height <= 1 {
    return (view as! UIImageView)
    }

    for subview in view.subviews {
    if let imageView = findShadowImage(under: subview) {
    return imageView
    }
    }
    return nil
    }
  3. 添加/编辑 viewWillAppear/viewWillDisappear 方法:

    override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    if shadowImageView == nil {
    shadowImageView = findShadowImage(under: navigationController!.navigationBar)
    }
    shadowImageView?.isHidden = true
    }

    override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)

    shadowImageView?.isHidden = false
    }

同样的方法也应该适用于 UISearchBar 细线,和(几乎)任何你需要隐藏的东西:)

非常感谢 @Leo Natan 的原创创意!

关于ios - 如何隐藏 UINavigationBar 1px 底线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19226965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com