UINavigation Bar를 투명하게 하다
UINavigation Bar를 투명하게 만들려면 어떻게 해야 합니까?하지만 바 아이템이 보이는 상태로 유지되길 원합니다.
iOS 7+에서 이를 실현하는 방법을 알고 싶다면 다음과 같은 해결책을 제시합니다(iOS 6 호환).
목표-C에서
[self.navigationBar setBackgroundImage:[UIImage new]
forBarMetrics:UIBarMetricsDefault];
self.navigationBar.shadowImage = [UIImage new];
self.navigationBar.translucent = YES;
In swift 3 (iOS 10)
self.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationBar.shadowImage = UIImage()
self.navigationBar.isTranslucent = true
인스위
self.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)
self.navigationBar.shadowImage = UIImage()
self.navigationBar.translucent = true
논의
설정translucent
로.YES
설명서에서 설명하는 동작 때문에 네비게이션바에서 문제가 해결됩니다.여기에 관련 내용을 보고하겠습니다.
이 속성을 다음과 같이 설정하면
YES
불투명 사용자 정의 배경 이미지가 있는 탐색 모음에서 탐색 막대는 1.0 미만의 시스템 불투명도를 이미지에 적용합니다.
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];
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];
최신 베타 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
}
}
}
Swift 2.x에서 이 작업을 수행하고자 하는 사용자:
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.translucent = true
또는 Swift 3.x:
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true
이것은 효과가 있는 것 같습니다.
@implementation UINavigationBar (custom)
- (void)drawRect:(CGRect)rect {}
@end
navigationController.navigationBar.backgroundColor = [UIColor clearColor];
다른 모든 사람이 위에서 말한 대로 한 후:
navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .default)
navigationController?.navigationBar.shadowImage = UIImage()
navigationController!.navigationBar.isTranslucent = true
내 내비게이션 바는 여전히 흰색이었어그래서 이 행을 추가했습니다.
navigationController?.navigationBar.backgroundColor = .clear
... et voila!그게 효과가 있는 것 같았어.
이 토픽이 오래된 것은 알지만, 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()
솔루션 - Swift 5 - iOS 13 이상
매뉴얼에 따르면 UIViewController 서브클래스에서 다음 작업을 수행합니다.
override func viewDidLoad()
{
super.viewDidLoad()
let appearance = UINavigationBarAppearance()
appearance.configureWithTransparentBackground()
//appearance.backgroundColor = UIColor.clear
navigationItem.compactAppearance = appearance
navigationItem.scrollEdgeAppearance = appearance
navigationItem.standardAppearance = appearance
//...
}
하자면, 이 에, 「이러다」, 「이러다」가.UINavigationBar
완전히 투명합니다.바 버튼 항목은 아직 표시되며 올바르게 동작합니다.
무엇이 효과가 없었습니까?
override func viewDidLoad()
{
super.viewDidLoad()
navigationController?.navigationBar.isTranslucent = true
navigationController?.navigationBar.isOpaque = false
//...
}
이를 통해 저는 투명 RIP와 반투명 RIP의 차이를 잘 몰랐다는 것을 깨달았습니다.
레퍼런스
https://www.lexico.com/en/definition/transparent
https://www.lexico.com/en/definition/translucent
2021년 8월 10일 갱신
의 변경navigationItem
바 버튼을 클릭하면 아피아란스가 리셋되고 다시 해야 합니다.
Swift 3.0의 경우:
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
navigationController?.navigationBar.shadowImage = UIImage()
navigationController?.navigationBar.isTranslucent = true
}
C# / Xamarin 솔루션
NavigationController.NavigationBar.SetBackgroundImage(new UIImage(), UIBarMetrics.Default);
NavigationController.NavigationBar.ShadowImage = new UIImage();
NavigationController.NavigationBar.Translucent = true;
다음의 코드를 시험해 보겠습니다.
self.navigationController.navigationBar.translucent = YES;
또 다른 방법은 UINavigation Bar를 Subclass하고 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
}}
Swift 4.2의 경우
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true
(viewWillApear에서), 그런 다음 viewWillDisplay에서 실행 취소하려면
self.navigationController?.navigationBar.shadowImage = nil
self.navigationController?.navigationBar.isTranslucent = false
이것은 Swift 5에서 작동했습니다.
// Clear the background image.
navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
// Clear the shadow image.
navigationController?.navigationBar.shadowImage = UIImage()
// Ensure the navigation bar is translucent.
navigationController?.navigationBar.isTranslucent = true
완전 투명인가요, 아니면 포토 앱에서 볼 수 있는 반투명 블랙 스타일인가요?는 '다'를 '다'로 설정하면 .barStyle
을 property property로 설정합니다.UIBarStyleBlackTranslucent
잘 모르겠어요.해당 항목을 계속 표시하려면 표시줄의 보기 계층에서 탐색을 수행하고 배경을 포함하는 보기를 제거해야 할 수 있습니다.
이것은 Swift 2.0에서 동작합니다.
navigationController!.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default)
navigationController!.navigationBar.shadowImage = UIImage()
navigationController!.navigationBar.translucent = true
UINavigation 바아피아란스 관리 전용 RRViewController Extension을 체크합니다.
RRViewControllerExtension을 프로젝트에 포함시키면
-(BOOL)prefersNavigationBarTransparent;
뷰 컨트롤러에 표시됩니다.
extension UINavigationBar {
var isTransperent: Bool {
get {
return false // Just to satisfy property
}
set {
if newValue {
self.shadowImage = UIImage()
self.isTranslucent = true
self.setBackgroundImage(UIImage(), for: .default)
} else {
self.shadowImage = UIImage()
self.isTranslucent = false
self.setBackgroundImage(nil, for: .default)
}
}
}
}
언급URL : https://stackoverflow.com/questions/2315862/make-uinavigationbar-transparent
'programing' 카테고리의 다른 글
UserControl 포커스 직사각형 삭제 (0) | 2023.04.15 |
---|---|
해시 루프 또는 PowerShell 어레이 사용 (0) | 2023.04.10 |
Git에서 셸 명령어를 실행할 때 사용할 개인 SSH 키를 지정하는 방법은 무엇입니까? (0) | 2023.04.10 |
바인딩 변환기 매개 변수 (0) | 2023.04.10 |
git 오류: 일부 참조를 원격으로 푸시하지 못했습니다. (0) | 2023.04.10 |