운없이 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: "")
삽화:
답변
문제는 다음 두 줄에 있습니다.
self.navigationController?.navigationBar.setBackgroundImage(UIImage(named: ""), forBarMetrics: UIBarMetrics.Default)
self.navigationController?.navigationBar.shadowImage = UIImage(named: "")
이름이없는 이미지가 없으므로를 UIImage(named: "")
반환합니다 nil
. 이는 기본 동작이 시작됨을 의미합니다.
nil이 아닌 경우 기본 그림자 이미지 대신 표시 할 사용자 지정 그림자 이미지입니다. 사용자 지정 그림자를 표시하려면 -setBackgroundImage : forBarMetrics :를 사용하여 사용자 지정 배경 이미지도 설정해야합니다 (기본 배경 이미지가 사용되는 경우 기본 그림자 이미지가 사용됨).
정말 빈 이미지가 필요하므로 다음으로 초기화하십시오 UIImage()
.
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
self.navigationController?.navigationBar.shadowImage = UIImage()
답변
Swift 4 및 Swift 5
테두리 제거 :
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for:.default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.layoutIfNeeded()
테두리 복원 :
self.navigationController?.navigationBar.setBackgroundImage(nil, for:.default)
self.navigationController?.navigationBar.shadowImage = nil
self.navigationController?.navigationBar.layoutIfNeeded()
답변
이렇게하면 그림자 이미지가 모두 제거됩니다.
for parent in self.navigationController!.navigationBar.subviews {
for childView in parent.subviews {
if(childView is UIImageView) {
childView.removeFromSuperview()
}
}
}
답변
Swift 2를 사용하면 다음과 같이 할 수 있습니다.
AppDelegate 파일
내부 func 응용 프로그램 (…, didFinishLaunchingWithOptions launchOptions : …)
UINavigationBar.appearance().shadowImage = UIImage()
UINavigationBar.appearance().setBackgroundImage(UIImage(), forBarMetrics: .Default)
Swift 3 :
UINavigationBar.appearance().shadowImage = UIImage()
UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default)
답변
UINavigationBar의 확장에 이것을 작성하십시오.
extension UINavigationBar {
func shouldRemoveShadow(_ value: Bool) -> Void {
if value {
self.setValue(true, forKey: "hidesShadow")
} else {
self.setValue(false, forKey: "hidesShadow")
}
}
}
그리고 당신의 viewController에서 …
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.navigationBar.shouldRemoveShadow(true)
}
그리고 viewController에 대해 이것을 취소하려면 false를 전달하십시오.
답변
색조를 설정 barStyle
하기 .Black
전에로 설정 :
self.navigationController?.navigationBar.translucent = false
self.navigationController?.navigationBar.barStyle = .Black
self.navigationController?.navigationBar.barTintColor = UIColor.blueColor()
답변
스위프트 5
setBackgroundImage / shadowImage를 사용하여 헤어 라인을 숨기면 약간의 지연이 있습니다. 이 방법은 지연을 제거합니다. Chameleon Framework에 대한 크레딧 . 이것이 그들이 사용하는 방법입니다 (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
}
}