[ios] UINavigationBar를 투명하게 만들기

UINavigationBar를 어떻게 투명하게 만드 나요? 막대 항목을 계속 표시하고 싶지만.



답변

누구나 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

토론

설정 translucentYES탐색 모음에서 것은 인해 논의 행동에 트릭을 수행 UINavigationBar설명서를 참조하십시오. 여기에 관련 조각을보고하겠습니다.

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];


답변

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


답변

이것은 작동하는 것 같습니다 :

@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! 그 트릭을하는 것처럼 보였다.


답변

최신 베타 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
        }
    }
}