답변:
누구나 iOS 7 이상에서이를 달성하는 방법을 궁금해하는 경우 해결책이 있습니다 (iOS 6 호환 가능)
Objective-C에서
[self.navigationBar setBackgroundImage:[UIImage new]
forBarMetrics:UIBarMetricsDefault];
self.navigationBar.shadowImage = [UIImage new];
self.navigationBar.translucent = YES;
신속한 3 (iOS 10)
self.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationBar.shadowImage = UIImage()
self.navigationBar.isTranslucent = true
신속한 2
self.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)
self.navigationBar.shadowImage = UIImage()
self.navigationBar.translucent = true
설정 translucent
에 YES
탐색 모음에서 것은 인해 논의 행동에 트릭을 수행 UINavigationBar
설명서를 참조하십시오. 여기에 관련 조각을보고하겠습니다.
YES
불투명 한 사용자 정의 배경 이미지가있는 탐색 모음 에서이 속성을 설정 하면 탐색 모음이 시스템 불투명도가 1.0 미만인 이미지에 적용됩니다.
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default) self.navigationController?.navigationBar.shadowImage = UIImage() self.navigationController?.navigationBar.translucent = true
iOS5에서는 탐색 모음을 투명하게 만들 수 있습니다.
nav.navigationBar.translucent = YES; // Setting this slides the view up, underneath the nav bar (otherwise it'll appear black)
const float colorMask[6] = {222, 255, 222, 255, 222, 255};
UIImage *img = [[UIImage alloc] init];
UIImage *maskedImage = [UIImage imageWithCGImage: CGImageCreateWithMaskingColors(img.CGImage, colorMask)];
[nav.navigationBar setBackgroundImage:maskedImage forBarMetrics:UIBarMetricsDefault];
[img release];
[[UINavigationBar appearance] setShadowImage: [[UIImage alloc] init]];
IOS7에서 :
self.navigationController.navigationBar.translucent = YES;
self.navigationController.navigationBar.shadowImage = [UIImage new];
self.navigationController.view.backgroundColor = [UIColor clearColor];
[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];
Swift 2.x에서이 작업을 수행하려는 사람은 :
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.translucent = true
또는 스위프트 3.x :
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true
다른 사람들이 위에서 말한 것을 한 후 :
navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .default)
navigationController?.navigationBar.shadowImage = UIImage()
navigationController!.navigationBar.isTranslucent = true
... 내 네비게이션 바는 여전히 흰색이었다 . 그래서 나는이 줄을 추가했다 :
navigationController?.navigationBar.backgroundColor = .clear
... et voila! 그 트릭을하는 것처럼 보였다.
최신 베타 iOS 13.4 및 XCode 11.4로 빌드하면 허용되는 답변이 더 이상 작동하지 않습니다. 다른 방법을 찾았습니다. 베타 소프트웨어의 버그 일 수도 있지만 경우에 따라 아래에 작성하고 있습니다.
(빠른 5)
import UIKit
class TransparentNavBar :UINavigationBar {
override func awakeFromNib() {
super.awakeFromNib()
self.setBackgroundImage(UIImage(), for: .default)
self.shadowImage = UIImage()
self.isTranslucent = true
self.backgroundColor = .clear
if #available(iOS 13.0, *) {
self.standardAppearance.backgroundColor = .clear
self.standardAppearance.backgroundEffect = .none
self.standardAppearance.shadowColor = .clear
}
}
}
나는이 주제가 오래되었다는 것을 알고 있지만 사람들이 drawRect 메소드를 오버로드하지 않고 어떻게 수행되는지 알고 싶다면.
이것이 당신이 필요로하는 것입니다 :
self.navigationController.navigationBar.translucent = YES;
self.navigationController.navigationBar.opaque = YES;
self.navigationController.navigationBar.tintColor = [UIColor clearColor];
self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];
아래 코드는이 스레드에 선택된 최상위 답변을 확장하여 아래쪽 테두리를 제거하고 텍스트 색상을 설정합니다.
이 코드의 마지막 두 줄은 투명성을 설정합니다. 이 스레드에서 해당 코드를 빌려서 완벽하게 작동했습니다!
"clipsToBounds"속성은 내가 찾은 코드로 투명도를 설정하지 않고 OR로 아래쪽 경계선을 제거했습니다 (따라서 단색 흰색 / 검정 등 배경으로 이동하기로 결정한 경우 여전히 경계선이 없습니다).
"tintColor"라인 (2 번째 코드 라인)은 뒤로 버튼을 연한 회색으로 설정합니다.
barTintColor를 백업으로 유지했습니다. 투명성이 왜 효과가 없는지 모르겠지만, 그렇지 않으면 bg 화이트를 원합니다.
let navigationBarAppearace = UINavigationBar.appearance()
navigationBarAppearace.tintColor = UIColor.lightGray
navigationBarAppearace.barTintColor = UIColor.white
navigationBarAppearace.clipsToBounds = true
navigationBarAppearace.isTranslucent = true
navigationBarAppearace.setBackgroundImage(UIImage(), for: .default)
navigationBarAppearace.shadowImage = UIImage()
나를 위해 일한 또 다른 방법은 UINavigationBar를 서브 클래스 화하고 drawRect 메소드를 비워 두는 것입니다!
@IBDesignable class MONavigationBar: UINavigationBar {
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func drawRect(rect: CGRect) {
// Drawing code
}}
스위프트 4.2
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true
(viewWillAppear에서) 그런 다음 viewWillDisappear에서 실행 취소하려면
self.navigationController?.navigationBar.shadowImage = nil
self.navigationController?.navigationBar.isTranslucent = false
완전히 투명하거나 사진 앱에서 볼 수있는 반투명 검정색 스타일을 사용하십니까? 후자는 barStyle
속성을 로 설정하여 수행 할 수 있습니다 UIBarStyleBlackTranslucent
. 전자 ... 확실하지 않습니다. 항목을 계속 표시하려면 막대의보기 계층 구조를 파고 배경이 포함 된보기를 제거해야 할 수도 있습니다.
UINavigation 막대 모양 관리 전용 인 RRViewControllerExtension을 확인하십시오 .
프로젝트에서 RRViewControllerExtension을 사용하면 재정의해야합니다.
-(BOOL)prefersNavigationBarTransparent;
당신이 viewcontroller에서.
extension UINavigationBar {
var isTransperent: Bool {
get {
return false // Just to satisfy property
}
set {
if newValue == true {
self.shadowImage = UIImage()
self.isTranslucent = true
self.setBackgroundImage(UIImage(), for: .default)
}else{
self.shadowImage = UIImage()
self.isTranslucent = false
self.setBackgroundImage(nil, for: .default)
}
}
}
}
[self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault]; self.navigationController.navigationBar.shadowImage = nil; self.navigationController.navigationBar.translucent = NO;