iOS7에서 투명한 UIToolbar 또는 UINavigationBar를 그리는 방법


88

나는 완전히 투명 UIToolbar하고 / 또는 UINavigationBar. iOS 5 전후에 제안 된 다양한 주문을 시도했지만 더 이상 작동하지 않는 것 같습니다.

iOS 7에서 어떻게이 작업을 수행 할 수 있습니까?


후손을 위해-나는 실수로 self.edgesForExtendedLayout = UIRectEdgeNone을 사용하여 도구 모음 아래에서 뷰가 확장되는 것을 방지했습니다.
Ben Packard

답변:


303

Swift 3 (iOS 10)

투명한 UIToolbar

self.toolbar.setBackgroundImage(UIImage(),
                                forToolbarPosition: .any,
                                barMetrics: .default)
self.toolbar.setShadowImage(UIImage(), forToolbarPosition: .any)

투명한 UINavigationBar

self.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationBar.shadowImage = UIImage()
self.navigationBar.isTranslucent = true

스위프트 <3

투명한 UIToolbar

self.toolbar.setBackgroundImage(UIImage(),
                                forToolbarPosition: UIBarPosition.Any,
                                barMetrics: UIBarMetrics.Default)
self.toolbar.setShadowImage(UIImage(),
                            forToolbarPosition: UIBarPosition.Any)

투명한 UINavigationBar

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

목표 -C

투명한 UIToolbar

[self.toolbar setBackgroundImage:[UIImage new]
              forToolbarPosition:UIBarPositionAny
                      barMetrics:UIBarMetricsDefault];
[self.toolbar setShadowImage:[UIImage new]
          forToolbarPosition:UIBarPositionAny];

투명한 UINavigationBar

[self.navigationBar setBackgroundImage:[UIImage new]
                         forBarMetrics:UIBarMetricsDefault];
self.navigationBar.shadowImage = [UIImage new];
self.navigationBar.translucent = YES;

토론

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

YES불투명 한 사용자 정의 배경 이미지가있는 탐색 모음 에서이 속성을로 설정 하면 탐색 모음이 이미지에 1.0 미만의 시스템 불투명도를 적용합니다.


최종 결과

최종 결과


1
툴바 버전이 iOS7에서 작동하는지 확인 했습니까? 프레젠테이션에서 어두운 도구 모음과 이상한 깜박임이 나타납니다.
Ben Packard

2
스크린 샷은 iOS 7시뮬레이터 에서 가져온 것입니다
Gabriele Petronella

또한 iOS 7이 설치된 iPhone 5에서 테스트 앱을 실행했는데 예상대로 작동합니다.
Gabriele Petronella 2013 년

1
멋지게 SO 거기에 이것을 할 수있는, 많은 잘못된 / 잘못된 방법을 수행
pfrank

2
EdgeForExtendedLayout = UIRectEdgeNone을 사용하는 경우 사용자 지정 전환을 구현하는 것이 좋습니다. 그렇지 않으면 뷰를 푸시 할 때 기본 전환이 애니메이션 중에 투명 막대 아래에 어두운 깜박임을 생성하기 때문입니다. 참고로, 기본 슬라이딩 전환에 대한 빠른 리소스가 있습니다. gist.github.com/ArtFeel/7690431
anna

8

전체 앱을 통해 수행하려면 UIAppearance 프록시 (iOS5 +)를 사용해야합니다.

UINavigationBar *navigationBarAppearance = [UINavigationBar appearance]; navigationBarAppearance.backgroundColor = [UIColor clearColor]; [navigationBarAppearance setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault]; navigationBarAppearance.shadowImage = [[UIImage alloc] init];

문서 : https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIAppearance_Protocol/Reference/Reference.html

기사 : http://nshipster.com/uiappearance/


이것을보고있는 사람들을위한 참고 사항입니다.이 코드를 AppDelegate didFinishLaunchingWithOptions에 넣으면이 코드를 빠르고 간단하게 적용 할 수 있습니다.
Shaun F

특정 UINavigationController하위 클래스, 즉이 동작을 적용하려는 하위 클래스 에서만 작동하도록이 모양 프록시를 설정할 수도 있습니다 .
Evan R

2

시험:

[navBar setBackgroundImage:[UIImage alloc] forBarMetrics:UIBarMetricsDefault];

0
@implementation MyCustomNavigationBar

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [self setup];
    }
    return self;
}

- (id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    if (self) {
        [self setup];
    }
    return self;
}

- (void)setup {
    [self setupBackground];
}

- (void)setupBackground {
    self.backgroundColor = [UIColor clearColor];
    self.tintColor = [UIColor clearColor];

    // make navigation bar overlap the content
    self.translucent = YES; 
    self.opaque = NO;

    // remove the default background image by replacing it with a clear image
    [self setBackgroundImage:[self.class maskedImage] forBarMetrics:UIBarMetricsDefault];

    // remove defualt bottom shadow
    [self setShadowImage: [UIImage new]]; 
}

+ (UIImage *)maskedImage {
    const float colorMask[6] = {222, 255, 222, 255, 222, 255};
    UIImage *img = [UIImage imageNamed:@"nav-white-pixel-bg.jpg"];
    return [UIImage imageWithCGImage: CGImageCreateWithMaskingColors(img.CGImage, colorMask)];
}

@end

0

내가 우연히 발견 한 것은 서브 클래스 UINavigationBar를 생성 한 다음 빈 -(void)drawRect:메서드 를 생성하면 투명한 내비게이션 바가 표시 된다는 것입니다. iOS 7 *에서만 테스트했지만 작동하는 것 같았습니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.