IT story

UINavigationBar를 투명하게 만들기

hot-time 2020. 4. 16. 08:30
반응형

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


나는이 주제가 오래되었다는 것을 알고 있지만 사람들이 drawRect 메소드를 오버로드하지 않고 어떻게 수행되는지 알고 싶다면.

이것이 당신이 필요로하는 것입니다 :

self.navigationController.navigationBar.translucent = YES;
self.navigationController.navigationBar.opaque = YES;
self.navigationController.navigationBar.tintColor = [UIColor clearColor];
self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];

아래 코드는이 스레드에 대해 선택된 최상위 답변을 확장하여 아래쪽 테두리를 제거하고 텍스트 색상을 설정합니다.

  1. 이 코드의 마지막 두 줄은 투명도를 설정합니다. 이 스레드에서 해당 코드를 빌려서 완벽하게 작동했습니다!

  2. "clipsToBounds"속성은 내가 찾은 코드로 투명도를 설정하지 않고 OR를 사용하여 아래쪽 경계선을 제거했습니다 (따라서 단색 흰색 / 검정 등 배경을 사용하기로 결정한 경우 여전히 경계선이 없습니다).

  3. "tintColor"라인 (두 번째 코드 라인)은 뒤로 버튼을 연한 회색으로 설정합니다.

  4. 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()
    

다음 코드를 사용해보십시오.

self.navigationController.navigationBar.translucent = YES;

스위프트 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;

나를 위해 일한 또 다른 방법은 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
}}

완전히 투명하거나 사진 앱에서 볼 수있는 반투명 검정색 스타일을 사용합니까? 후자는 barStyle속성을 로 설정하여 수행 할 수 있습니다 UIBarStyleBlackTranslucent. 전자 ... 확실하지 않습니다. 항목을 계속 표시하려면 막대의보기 계층 구조를 파고 배경이 포함 된보기를 제거해야 할 수도 있습니다.


이것은 Swift 2.0에서 작동합니다.

navigationController!.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default)
navigationController!.navigationBar.shadowImage = UIImage()
navigationController!.navigationBar.translucent = true

UINavigation 막대 모양 관리 전용 인 RRViewControllerExtension을 확인하십시오 .

프로젝트에서 RRViewControllerExtension을 사용하면 재정의해야합니다.

-(BOOL)prefersNavigationBarTransparent;

당신이 viewcontroller에서.

네비게이션 바 투명


스위프트 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

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)
            }
        }
    }
}

참고 URL : https://stackoverflow.com/questions/2315862/make-uinavigationbar-transparent

반응형