Pet*_*Pik 105 iphone uinavigationbar ios swift
我一直试图删除navigationBars边框没有运气.我已经研究过,人们似乎告诉将shadowImage和BackgroundImage设置为nil,但这在我的情况下不起作用.
我的代码
self.navigationController?.navigationBar.barTintColor = UIColor(rgba: "#4a5866")
self.navigationController?.navigationBar.setBackgroundImage(UIImage(named: ""), forBarMetrics: UIBarMetrics.Default)
self.navigationController?.navigationBar.shadowImage = UIImage(named: "")
Run Code Online (Sandbox Code Playgroud)
插图:

Nat*_*ook 269
麻烦在于这两行:
self.navigationController?.navigationBar.setBackgroundImage(UIImage(named: ""), forBarMetrics: UIBarMetrics.Default)
self.navigationController?.navigationBar.shadowImage = UIImage(named: "")
Run Code Online (Sandbox Code Playgroud)
由于您没有没有名称的图像,因此UIImage(named: "")返回nil,这意味着默认行为将起作用:
当非零时,显示自定义阴影图像而不是默认阴影图像.要显示自定义阴影,还必须使用-setBackgroundImage设置自定义背景图像:forBarMetrics :(如果使用默认背景图像,将使用默认阴影图像).
你需要一个真正的空图像,所以只需初始化UIImage():
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
self.navigationController?.navigationBar.shadowImage = UIImage()
Run Code Online (Sandbox Code Playgroud)
Ste*_*yne 37
这将完全删除阴影图像
for parent in self.navigationController!.navigationBar.subviews {
for childView in parent.subviews {
if(childView is UIImageView) {
childView.removeFromSuperview()
}
}
}
Run Code Online (Sandbox Code Playgroud)
Saz*_*han 35
斯威夫特4
删除边框:
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for:.default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.layoutIfNeeded()
Run Code Online (Sandbox Code Playgroud)
恢复边界:
self.navigationController?.navigationBar.setBackgroundImage(nil, for:.default)
self.navigationController?.navigationBar.shadowImage = nil
self.navigationController?.navigationBar.layoutIfNeeded()
Run Code Online (Sandbox Code Playgroud)
Jor*_*ego 34
使用Swift 2,你可以这样做:
AppDelegate文件
内部func应用程序(...,didFinishLaunchingWithOptions launchOptions:...)
UINavigationBar.appearance().shadowImage = UIImage()
UINavigationBar.appearance().setBackgroundImage(UIImage(), forBarMetrics: .Default)
Run Code Online (Sandbox Code Playgroud)
对于Swift 3:
UINavigationBar.appearance().shadowImage = UIImage()
UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default)
Run Code Online (Sandbox Code Playgroud)
Gau*_*ana 31
只需在UINavigationBar的扩展中写下这个
extension UINavigationBar {
func shouldRemoveShadow(_ value: Bool) -> Void {
if value {
self.setValue(true, forKey: "hidesShadow")
} else {
self.setValue(false, forKey: "hidesShadow")
}
}
}
Run Code Online (Sandbox Code Playgroud)
在你的viewController ..
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.navigationBar.shouldRemoveShadow(true)
}
Run Code Online (Sandbox Code Playgroud)
为了解决任何viewController的问题,只需传递'false'即可.
Dre*_*rew 17
对于 iOS 13+:
let appearance = UINavigationBarAppearance()
appearance.shadowColor = .clear
Run Code Online (Sandbox Code Playgroud)
将此外观分配给UINavigationBar:
navigationController?.navigationBar.standardAppearance = appearance
navigationController?.navigationBar.scrollEdgeAppearance = appearance
navigationController?.navigationBar.compactAppearance = appearance
Run Code Online (Sandbox Code Playgroud)
设置shadowImage = UIImage()对我来说不起作用。
小智 16
斯威夫特 5
使用 setBackgroundImage / shadowImage 隐藏发际线时,会有一点延迟。这种方法消除了延迟。感谢变色龙框架。这是他们使用的方法(在 ObjC 中)
extension UINavigationController {
func hideHairline() {
if let hairline = findHairlineImageViewUnder(navigationBar) {
hairline.isHidden = true
}
}
func restoreHairline() {
if let hairline = findHairlineImageViewUnder(navigationBar) {
hairline.isHidden = false
}
}
func findHairlineImageViewUnder(_ view: UIView) -> UIImageView? {
if view is UIImageView && view.bounds.size.height <= 1.0 {
return view as? UIImageView
}
for subview in view.subviews {
if let imageView = self.findHairlineImageViewUnder(subview) {
return imageView
}
}
return nil
}
}
Run Code Online (Sandbox Code Playgroud)
gpb*_*pbl 13
设置barStyle来.Black设置色调之前:
self.navigationController?.navigationBar.translucent = false
self.navigationController?.navigationBar.barStyle = .Black
self.navigationController?.navigationBar.barTintColor = UIColor.blueColor()
Run Code Online (Sandbox Code Playgroud)
Luca Davanzo的答案很棒,但它在iOS 10中不起作用.我将其改为iOS 10及以下版本.
for parent in navigationController!.view.subviews {
for child in parent.subviews {
for view in child.subviews {
if view is UIImageView && view.frame.height == 0.5 {
view.alpha = 0
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
您还可以扩展UINavigationController并将其调用.removeFromSuperview()在线上将不能在iOS 10上工作,所以我只是将alpha设置为0,所以这一个调用在任何地方都兼容.
let navBarAppearance = UINavigationBarAppearance()
navBarAppearance.configureWithTransparentBackground()
Run Code Online (Sandbox Code Playgroud)
要从Swift 3+中删除UINavigationBar的边框,请使用:
UINavigationBar.appearance().shadowImage = UIImage()
UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default)
UINavigationBar.appearance().isTranslucent = false
Run Code Online (Sandbox Code Playgroud)
Only this worked for me,
self.navigationController?.navigationBar.shadowImage = UIImage()
Run Code Online (Sandbox Code Playgroud)
为 Swift 4 更新,以防有人想知道
navigationBar.shadowImage = UIImage()
navigationBar.backIndicatorImage = UIImage()
Run Code Online (Sandbox Code Playgroud)
现在更不冗长了。
Jack Chen的Swiftier方法:
extension UINavigationController {
var isHiddenHairline: Bool {
get {
guard let hairline = findHairlineImageViewUnder(navigationBar) else { return true }
return hairline.isHidden
}
set {
if let hairline = findHairlineImageViewUnder(navigationBar) {
hairline.isHidden = newValue
}
}
}
private func findHairlineImageViewUnder(_ view: UIView) -> UIImageView? {
if view is UIImageView && view.bounds.size.height <= 1.0 {
return view as? UIImageView
}
for subview in view.subviews {
if let imageView = self.findHairlineImageViewUnder(subview) {
return imageView
}
}
return nil
}
}
Run Code Online (Sandbox Code Playgroud)
使用:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.isHiddenHairline = true
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
navigationController?.isHiddenHairline = false
}
Run Code Online (Sandbox Code Playgroud)
对于斯威夫特3
在viewDidLoad方法中
navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
navigationController?.navigationBar.shadowImage = UIImage()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
60932 次 |
| 最近记录: |