탐색 막대의 테두리를 신속하게 제거하는 방법은 무엇입니까?
네비게이션 바의 테두리를 제거하려고 했지만 잘 안 됐어요조사해보니 섀도우이미지와 배경이미지를 0으로 설정하라고 하는 것 같았는데, 제 경우는 잘 되지 않습니다.
내 코드
self.navigationController?.navigationBar.barTintColor = UIColor(rgba: "#4a5866")
self.navigationController?.navigationBar.setBackgroundImage(UIImage(named: ""), forBarMetrics: UIBarMetrics.Default)
self.navigationController?.navigationBar.shadowImage = UIImage(named: "")
그림:
이 문제는 다음 2개의 회선에 있습니다.
self.navigationController?.navigationBar.setBackgroundImage(UIImage(named: ""), forBarMetrics: UIBarMetrics.Default)
self.navigationController?.navigationBar.shadowImage = UIImage(named: "")
에, ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」UIImage(named: "")
nil
과 같이 됩니다.
nil이 아닌 경우 기본 섀도 이미지 대신 표시할 사용자 지정 섀도 이미지입니다.커스텀 섀도를 표시하려면 커스텀 배경 이미지도 -setBackgroundImage:forBarMetrics:로 설정해야 합니다(기본 배경 이미지가 사용되는 경우 기본 그림자 이미지가 사용됩니다).
빈 하니까, 그냥 전전 、 izeize 、 음음음 、 음음ize음izeizeizeizeizeizeizeizeizeizeizeizeizeizeizeizeizeizeizeizeizeizeize로 .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()
Swift 2에서는 다음과 같이 할 수 있습니다.
AppDelegate 파일
내부 func 어플리케이션(...did Finish Launching With Options launch Options:...)
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")
}
}
}
그리고 뷰컨트롤러에서...
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.navigationBar.shouldRemoveShadow(true)
}
모든 viewController에서 이 작업을 취소하려면 false를 전달하십시오.
이렇게 하면 그림자 이미지가 완전히 제거됩니다.
for parent in self.navigationController!.navigationBar.subviews {
for childView in parent.subviews {
if(childView is UIImageView) {
childView.removeFromSuperview()
}
}
}
스위프트 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
}
}
let navBarAppearance = UINavigationBarAppearance()
navBarAppearance.configureWithTransparentBackground()
★★barStyle
로로 합니다..Black
「CHANGE MARGE:」
self.navigationController?.navigationBar.translucent = false
self.navigationController?.navigationBar.barStyle = .Black
self.navigationController?.navigationBar.barTintColor = UIColor.blueColor()
iOS 13+의 경우:
let appearance = UINavigationBarAppearance()
appearance.shadowColor = .clear
를 에 할당합니다.UINavigationBar
:
navigationController?.navigationBar.standardAppearance = appearance
navigationController?.navigationBar.scrollEdgeAppearance = appearance
navigationController?.navigationBar.compactAppearance = appearance
★★shadowImage = UIImage()
나한테는 통하지 않았어
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
}
}
}
}
UINavigation Controller(UINavigation Controller)는 UINavigation Controller(UINavigation Controller). removeFromSuperview()
회선은 하지 않기 에, 이 되도록, 으로 설정했을 뿐입니다.iOS 10에서는 동작하지 않기 때문에, 이 1개의 콜이 어디에서나 호환되도록 알파를 0으로 설정했습니다.
Swift 3+의 UINavigationBar에서 테두리를 제거하려면 다음을 사용합니다.
UINavigationBar.appearance().shadowImage = UIImage()
UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default)
UINavigationBar.appearance().isTranslucent = false
Jack Chen의 보다 빠른 방법:
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
}
}
사용방법:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.isHiddenHairline = true
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
navigationController?.isHiddenHairline = false
}
난 이것만 먹혔어쨌든
self.navigationController?.navigationBar.shadowImage = UIImage()
swift 3을 위해
viewDidLoad
법 method
navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
navigationController?.navigationBar.shadowImage = UIImage()
궁금하신 분들을 위해 Swift 4용으로 업데이트 되었습니다.
navigationBar.shadowImage = UIImage()
navigationBar.backIndicatorImage = UIImage()
지금은 훨씬 덜 장황하다.
받아들여진 답변은 효과가 있었지만, 팝업백이나 다른 VC에 푸시 할 때 섀도 이미지를 다시 표시하고 싶을 때 네비게이션 바에 눈에 띄게 깜박임이 있음을 알게 되었습니다.
navigationController?.navigationBar.setValue(true, forKey: "hidesShadow")
view섀도 막대가 현재 표시 가능한 뷰 컨트롤러에 숨겨져 있는지 확인합니다.
다음 2가지 방법 사용
navigationController?.navigationBar.setBackgroundImage(nil, for: .default)
navigationController?.navigationBar.setValue(false, forKey: "hidesShadow")
viewShadow 이미지가 다시 나타날 때만 깜박임이 계속 발생하며 탐색 모음 자체는 표시되지 않습니다.
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()
}
하단만 삭제하고 탐색 막대의 단색을 유지하려면 viewDidLoad: Swift 3, 4에서 다음 코드 행을 추가하십시오.
navigationController?.navigationBar.shadowImage = UIImage()
navigationController?.navigationBar.isTranslucent = false
피스!
배경색을 변경하지 않고 다음과 같이 작업을 수행할 수 있습니다.
// 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()
}
}
}
메모: 프로덕션 앱에서 충돌할 수 있습니다.네비게이션 바는 뷰가 사라지는 것을 좋아하지 않는 것 같습니다.
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%의 사람들이 이 방법을 사용할 수 있습니다.
custom navigation Controller에서 다음 행을 추가합니다.
self.navigationBar.setBackgroundImage(UIImage(), for:.default)
self.navigationBar.shadowImage = UIImage()
self.navigationBar.layoutIfNeeded()
중요사항
첫 번째 줄 viewDidLoad() 메서드를 사용하는 경우 navigationController는 네비게이션 바를 다시 그려야 하지만 쉽게 viewWillAppear() 메서드에서 layoutIfNeeded() 없이 사용할 수 있습니다.
AppDelegate의 didFinishLaunchingWithOptions 메서드에서 이 코드를 사용하여 앱 전체에 도달합니다.
let barAppearance = UINavigationBar.appearance()
if #available(iOS 13, *) {
let appearance = UINavigationBarAppearance()
appearance.configureWithTransparentBackground()
barAppearance.standardAppearance = appearance
barAppearance.scrollEdgeAppearance = appearance
} else {
barAppearance.setBackgroundImage(UIImage(), for: UIBarPosition.any, barMetrics: UIBarMetrics.defaultPrompt)
barAppearance.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")
}
}
앱 위임자
UINavigationBar.appearance().setBackgroundImage(UIImage(), for: UIBarMetrics.default)
UINavigationBar.appearance().shadowImage = UIImage()
경계선은 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에 불과하기 때문에 이 코드는 그것만 삭제합니다.
이것은 네이트 쿡의 빠른 3단계 답변이다.
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
self.navigationController?.navigationBar.shadowImage = UIImage()
iOS 11 및 Swift 4 테두리를 제거하고 싶지만 탐색 막대를 반투명하게 만들지 않으려면 다음을 수행해야 합니다.self.navigationBar.shadowImage = UIImage()
Xcode 14.2를 사용하고 있습니다.Xcode UI를 사용하여 이 작업을 수행하려면 탐색 컨트롤러를 선택한 다음 탐색 막대, 특성 검사기 및 스크롤 가장자리 모양에서 섀도 색상을 지우도록 설정합니다.
이 문제를 해결하기 위해 액티비티 인스펙터에서 네비게이션 바의 섀도 색상을 Clear로 변경했습니다.
[네비게이션 바 섀도 색상 변경****강 텍스트][1]
[1]: https://i.stack.imgur.com/i3Kdo.png***strong 텍스트 보기
언급URL : https://stackoverflow.com/questions/26390072/how-to-remove-border-of-the-navigationbar-in-swift
'programing' 카테고리의 다른 글
git 클론:인증에 실패했습니다. (0) | 2023.04.22 |
---|---|
bash 세레도크 내의 변수 사용 (0) | 2023.04.22 |
TextBox에서 입력 시 뷰모델 명령 실행 (0) | 2023.04.17 |
외부 파일 또는 어셈블리에서 WPF 스타일 또는 기타 정적 리소스 로드 (0) | 2023.04.17 |
영구 환경 변수를 cmd에서 설정합니다.실행 (0) | 2023.04.17 |