신속하게 navigationBar에서 제거
운없이 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()
이렇게하면 그림자 이미지가 모두 제거됩니다.
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)
스위프트 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는 취소 요청을 거짓으로 전달하십시오.
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()
를 색조 설정 barStyle하기 .Black전에로 설정하십시오.
self.navigationController?.navigationBar.translucent = false
self.navigationController?.navigationBar.barStyle = .Black
self.navigationController?.navigationBar.barTintColor = UIColor.blueColor()
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
}
}
}
}
UINavigationController를 확장하고 호출 할 수도 있습니다. removeFromSuperview()iOS 10에서 작동하지 않는 알파를 0으로 설정하여 모든 곳에서 호환됩니다.
Swift 3+의 UINavigationBar에서 사용을 선택하십시오.
UINavigationBar.appearance().shadowImage = UIImage()
UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default)
UINavigationBar.appearance().isTranslucent = false
신속한 3
의 viewDidLoad방법
navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
navigationController?.navigationBar.shadowImage = UIImage()
누군가 궁금해하는 경우 Swift 4 업데이트
navigationBar.shadowImage = UIImage()
navigationBar.backIndicatorImage = UIImage()
지금은 훨씬 덜 장황합니다.
배경색을 변경하지 않고 수행하려는 경우 다음과 같습니다.
// Remove the border ImageView from the NavigationBar background
func hideBottomBorder() {
for view in navigationBar.subviews.filter({ NSStringFromClass($0.dynamicType) == "_UINavigationBarBackground" }) as [UIView] {
if let imageView = view.subviews.filter({ $0 is UIImageView }).first as? UIImageView {
imageView.removeFromSuperview()
}
}
}
참고 : 프로덕션 앱에서 충돌이 발생할 수 있습니다. 분명히 NavigationBar는 뷰가 사라지는 것을 좋아하지 않습니다.
이것 만이 나를 위해 일했습니다.
self.navigationController?.navigationBar.shadowImage = UIImage()
swift3의 경우 약간 다른 방식으로 작성해야합니다.
self.navigationController?.navigationBar.setBackgroundImage(UIImage(),
for: UIBarMetrics.default)
self.navigationController?.navigationBar.shadowImage = UIImage()
이것은 Gaurav Chandarana 의 대답을 간소화 한 버전입니다 .
extension UINavigationBar {
func hideShadow(_ value: Bool = true) {
setValue(value, forKey: "hidesShadow")
}
}
받아 들인 대답은 나를 위해 일했지만 뒤로 튀어 나오거나 다른 vc로 앞으로 밀 때 그림자 이미지가 다시 나타나기를 원할 때 탐색 모음에서 눈에 띄는 깜박임이 있음을 알았습니다.
navigationController?.navigationBar.setValue(true, forKey: "hidesShadow")viewWillAppear 에서이 메서드 를 사용 하면 현재 보이는 뷰 컨트롤러에서 섀도우 바가 숨겨집니다.
이 두 가지 방법 사용
navigationController?.navigationBar.setBackgroundImage(nil, for: .default)
navigationController?.navigationBar.setValue(false, forKey: "hidesShadow")
viewWillDisappear에서 깜박임은 여전히 발생하지만 그림자 이미지가 다시 나타날 때만 발생하고 탐색 모음 자체는 표시되지 않습니다.
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// 1. hide the shadow image in the current view controller you want it hidden in
navigationController?.navigationBar.setValue(true, forKey: "hidesShadow")
navigationController?.navigationBar.layoutIfNeeded()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(true)
// 2. show the shadow image when pushing or popping in the next view controller. Only the shadow image will blink
navigationController?.navigationBar.setBackgroundImage(nil, for: .default)
navigationController?.navigationBar.setValue(false, forKey: "hidesShadow")
navigationController?.navigationBar.layoutIfNeeded()
}
맨 아래 줄만 제거하고 navigationBar의 단색을 유지하려면 viewDidLoad : Swift 3, 4에 다음 코드 줄을 추가합니다.
navigationController?.navigationBar.shadowImage = UIImage()
navigationController?.navigationBar.isTranslucent = false
평화!
스위프트 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
}
}
경계선은 UIImageView이고 imageView 인 하위보기를 제거하면 UIImageView와 함께 barButtonItems가 제거됩니다. 아래 코드는 제거하는 데 도움이됩니다. 이것이 나와 같은 문제에 직면 한 사람에게 도움이되기를 바랍니다.
for parent in self.navigationController!.navigationBar.subviews {
for childView in parent.subviews {
if childView.frame.height == 0.5 {
childView.removeFromSuperview()
}
}
}
테두리 UIImageView는 높이가 0.5에 불과하므로이 코드는이를 제거합니다.
AppDelegate 내 에서 이것은 NavBar의 형식을 전역 적으로 변경하고 하단 라인 / 테두리를 제거합니다.
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
UINavigationBar.appearance().setBackgroundImage(UIImage(), forBarPosition: UIBarPosition.Any, barMetrics: UIBarMetrics.Default)
UINavigationBar.appearance().shadowImage = UIImage()
UINavigationBar.appearance().tintColor = UIColor.whiteColor()
UINavigationBar.appearance().barTintColor = UIColor.redColor()
UINavigationBar.appearance().translucent = false
UINavigationBar.appearance().clipsToBounds = false
//UINavigationBar.appearance().backgroundColor = UIColor.redColor()
UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName : (UIFont(name: "FONT NAME", size: 18))!, NSForegroundColorAttributeName: UIColor.whiteColor()] }
특정 VC에서 다른 것을 구현하지 못했지만 90 %의 사람들에게 도움이 될 것입니다.
이것은 네이트 쿡 답변의 수단 3 기반의 답변입니다.
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
self.navigationController?.navigationBar.shadowImage = UIImage()
iOS 11 및 Swift 4는 제거하고 싶지만 navigitonbar를 반투명하게 만들지면 다음을 시도해야합니다.self.navigationBar.shadowImage = UIImage()
앱 델리게이트
UINavigationBar.appearance().setBackgroundImage(UIImage(), for: UIBarMetrics.default)
UINavigationBar.appearance().shadowImage = UIImage()
사용자 정의 navigationController에 다음 줄을 추가하십시오.
self.navigationBar.setBackgroundImage(UIImage(), for:.default)
self.navigationBar.shadowImage = UIImage()
self.navigationBar.layoutIfNeeded()
중요 사항
첫 번째 줄인 viewDidLoad () 메서드를 사용하는 경우 마지막 줄이 중요합니다. navigationController는 탐색 모음을 다시 그려야하기 때문입니다. 그러나 탐색 모음을 그리기 전에 viewWillAppear () 메소드에서 layoutIfNeeded ()없이 쉽게 사용할 수 있습니다.
참고 URL : https://stackoverflow.com/questions/26390072/remove-border-in-navigationbar-in-swift
'IT' 카테고리의 다른 글
| MS 액세스에 대한 좋은 무료 대안 (0) | 2020.08.18 |
|---|---|
| 1 차원 스칼라 배열을 교리 dql 쿼리 결과로 얻는 방법은 무엇입니까? (0) | 2020.08.18 |
| Windows 7 64 비트에서 DLL 파일을 등록하고 있습니까? (0) | 2020.08.18 |
| UITableView의 배경을 터치하여 키보드 닫기 (0) | 2020.08.18 |
| 단위 테스트를 위해 비공개 메서드를 공개하는 중입니다. 좋은 생각인가요? (0) | 2020.08.18 |