我有一个应用有时需要其导航栏才能与内容融为一体。
有谁知道如何摆脱这个烦人的小酒吧或改变它的颜色?
在下图的情况下,我说的是“ Root View Controller ”下方的 1px 高度线
最佳答案
使用 .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
为此,您应该设置自定义阴影图像。但是要显示阴影图像,您还需要设置自定义背景图像,引用 Apple 的文档:
For a custom shadow image to be shown, a custom background image must also be set with the setBackgroundImage(_:for:) method. If the default background image is used, then the default shadow image will be used regardless of the value of this property.
所以:
let navigationBar = navigationController!.navigationBar
navigationBar.setBackgroundImage(#imageLiteral(resourceName: "BarBackground"),
for: .default)
navigationBar.shadowImage = UIImage()
以上是隐藏它的唯一“官方”方式。不幸的是,它消除了条形图的半透明性。
你有这些选择:
纯色,无半透明:
navigationBar.barTintColor = UIColor.redColor()
navigationBar.isTranslucent = false
navigationBar.setBackgroundImage(UIImage(), for: .default)
navigationBar.shadowImage = UIImage()
创建填充颜色的小背景图像并使用它。
使用下面描述的“hacky”方法。它还将保持条形半透明。
要保持半透明,您需要另一种方法,它看起来像一个 hack,但效果很好。我们试图移除的阴影是 UINavigationBar
下某处的细线 UIImageView
。我们可以找到它并在需要时隐藏/显示它。
以下说明假设您只需要在 UINavigationController
层次结构的一个 Controller 中隐藏细线。
声明实例变量:
private var shadowImageView: UIImageView?
找到这个阴影(细线)的添加方法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
}
添加/编辑 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 的原创创意!
https://stackoverflow.com/questions/19226965/
相关文章:
ios - 使用 iOS 确定设备(iPhone、iPod Touch)
objective-c - Objective-C 中的#import 和#include 有什么区
objective-c - 如何按字母顺序对 NSArray 进行排序?
ios - 文件是通用的(三个切片),但它不包含 iOS 上静态库的(n)ARMv7-s 切片错误,
ios - 应用程序在应用程序启动结束时应该有一个 Root View Controller
iphone - 如何使用返回键关闭 UITextView 的键盘?